百科问答小站 logo
百科问答小站 font logo



C# 的扩展方法是否是一个糟糕的设计? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

我就回答最后一个问题吧,为什么不能设计为编译不通过。


首先,扩展方法通常是在接口上扩展,所以譬如说Contains方法,要么不能在IEnumerable扩展,要么就要修改现有的List的实现,无论哪一种都很坑爹。

其次,不论是类型本身还是扩展方法,都可能不存在于自己编写的代码中(例如上文中的List和Enumerable),所以一旦两个东西冲突就面临二选一的问题。当然你可以选择不using命名空间,这样就永远不会选择扩展方法的重载,但是这显然非常的麻烦。

当然,你想的是编写扩展方法的程序集编译的时候不能被编译通过。但实际上这也行不通,因为编写扩展方法的程序集编译的时候被扩展的类型还没有这个方法。此时是合法的,但是编译后,被扩展的类型程序集升级了多个这个方法,所以你要报错,则只可能在使用这个方法的时候。


C#的方法重载决策规则过于复杂的确是给很多萌新带来了很多的困扰,这是客观事实。但实际上另一方面让人使用了意料之外的重载,本质上也是库函数本身质量的问题。但不可回避的是,由于重载规则的过于复杂,导致dotnet本身的库函数都不可避免地带来一些意料之外重载。

例如典型的View方法的View(string, object)和View(string,string)重载,当ViewModel是string的时候,如果想当然地直接调用View方法,则会错误的命中第二个重载。


这种例子其实还是很多的……


然后每次C#语法升级,方法重载策略就要更复杂一些,在未来会成为C#的包袱也说不定。

毕竟目前就有个天坑:0可以隐式转换为任意枚举值并且重载优先级还挺高的。


user avatar   meng-jian-wei-lai-96 网友的相关建议: 
      

一大早起来真是笑死我了。

由于老头环空前的热潮,以及B站特有的UP主靠制作视频吸引流量转直播的模式,导致很多有人气但完全没有魂系列经验的主播在播这款游戏。比如某幻、瓶子。

(就是一开始制作视频是主业,直播是兼职,甚至是乐趣兴趣,到直播为主,制作视频反倒成了兼职。这种现象在游戏区特别明显。)

这就很有节目效果了,我看几个有名气的主播,都是重复被虐,平均活不过5分钟。真正是在哪里跌倒就从哪里跌倒。

很多在我们这些老玩家看来常识性的东西,对于他们来说完全不存在的。

盾反这种就不提了(其实我也不会),连二人转、回合制、推图都不懂。在大型地牢里不想打小怪,一个劲往前跑,结果变成开火车;当着怪物的面喝药=白喝;开宝箱被怪物背刺;以为学了法术就是法爷了,结果被几只鸟打得抱头鼠窜。

然后另一边,那些原本有魂系列经验的主播,就吃了刻板印象的亏。觉得自己有技术有实力,也不练级就顺着主线硬钢。就比如一上来的野外精英太阳骑士,要么你死要么我亡,绕路是不可能绕路的。

太阳骑士都还好,毕竟王老菊都能杀。

但没有等级,没有血量,没有伤害,硬钢噩兆。

真当噩兆快慢刀是假的,自己打几次就能盾反了?而且老头环这次砍了盾反在BOSS战中的作用,要反三次(二次)才能触发处决。

结果被虐3000遍,又不好意思去练级,尬在那了。

老头环是不是玩家的盛宴我还不知道(买了游戏,昨天也预下载了,结果今天起来发现那个盘满了……正在重新下载,下载完了又发现,我的电脑只有8G内存……),但肯定是不少主播的灾难、观众的盛宴。

当然,我也知道有些主播直播受罪是搞节目效果,但我也是真看到有主播被气到下播了。

另外一点,老头环这次其实是以探索为主要玩法。

B站UP主老戴今天专门做了一期视频讲解,想要玩好、玩轻松,就是尽可能的探索地图,拿物品、刷等级。而不是走到哪杀到哪,打不过硬去打。

就比如第一个剧情BOSS前,大地图上有的是小型地牢,野外精英,要把图清完了再去打噩兆,真跟打弟弟一样。(收回我的话,40级30血20耐20敏+3打刀7瓶奶,打了7次才过。前三次就是纯背板,后三次有点贪,经常血瓶白喝,最后一次基本掌握出手时机,就硬耗过去了。)

其实魂系列游戏特别吃角色强度(等级、装备),一些小怪你一刀砍死和一刀残血,完全就是两种难度。打BOSS,你挨一下就要喝药,和挨两下才需要喝药也是两倍的差距。

不过按照这么个玩法,的确没有什么节目效果。

讲真,还真就是看那些新手主播无能狂怒最有节目效果。

至于游戏本体,如今我也的确是玩上了,总体上来说符合我的期待。

作为一个中年人,我其实是在看了老头环试玩视频后才接触魂系列的。

原因有2,一是手残反映慢,玩这种游戏非常苦手;二是,我其实不太喜欢魂系列那种压抑的黑暗风格。

但老头环作为开放世界,虽然依旧以压抑阴郁为主,但也有光明广阔的场景。比如一开始做完新手指引推门而出的那一刻。

至于在难度与操作方面,远程技能的实用化,召唤物的存在,以及跳砍与伪盾反的出现,真的能够解决很多问题。

只是看你愿不愿意当一个“卑鄙的褪色者”。

远程技能包括法术与射击。我玩的武士,初始给的长弓非常给力。尤其记得推一座城堡图的时候,一开始不清楚套路,进入城堡被满地的炸药桶与两个放火球的法师直接秒了。复活后掏出长弓,一剑封喉,解决掉法师无伤过了。

还有初期的一个地牢,一个场景墙上爬着的与左右墙角蹲着的类似地精的怪物,近战5-6刀才能砍死。

第一次去直接围殴致死。

第二次,用弓箭一只只引过来,很轻松就过了。

至于近战武器,我是非常推荐初期见完老婆就能开箱子拿到的君王大剑。

这把武器虽然攻速低,成长性也低,但在初期真的非常实用。

尤其是在跳劈方面。

这一作跳劈虽然强但也看武器,比如武士上来给的打刀就属于跳劈对空,跳起来横着劈一刀,有时候都打不到站着的怪。而大剑则是竖着往地上砸,范围极大。

我举一个例子,就是我开地图第一次遇到红灵。就是等对方打完一套跳劈就完了。

我的战斗策略就是,遇事不决,举盾防御,然后跳劈。

至于BOSS战,依旧有难度,也许跳劈和法术都没啥作用,依靠的依旧是精准的闪躲后普攻(排除盾反)。

但我觉得这算是魂系列的乐趣之一。

如果随便什么BOSS战都能逃课,那也就没意思了。




  

相关话题

  为什么不能能向方法同时传入dynamic 类型,和lambda类型的参数? 
  很多人都说 C# 语法怎么优雅,仅仅是因为 C# 的关键字多吗? 
  如何正确理解.NET 4.5和C# 5.0中的async/await异步编程模式? 
  .Net的垃圾回收机制是定时执行还是事件触发? 
  object是引用类型吗? 
  c#如何把gbk编码转成unicode编码? 
  asp.net MVC 和Web Form 相比各有什么优缺点? 
  为什么听说过 JVM 调优,却没听说过 CLR 调优? 
  C#为什么非要把函数叫方法? 
  有没有介绍C#这门语言的设计思想的书? 

前一个讨论
C#里的析构方法什么时候才会调用?
下一个讨论
求助,大一学Java还是C#?





© 2024-12-23 - tinynew.org. All Rights Reserved.
© 2024-12-23 - tinynew.org. 保留所有权利