在阅读了对该主题的许多回复之后,我发现很多不喜欢它的人都会引用滥用新关键字的可能性.我的问题是,什么样的滥用?怎么会这么严重地被滥用,以至于让人们激烈地不喜欢它呢?这只是纯粹主义吗?或者是否有一个我只是没有看到的真正陷阱?
我认为人们对此功能表达的很多反感归结为"这是一种糟糕的语言功能,因为它会让糟糕的开发人员编写错误的代码." 如果您考虑一下,按照这种逻辑,所有语言功能都很糟糕.
当我遇到某个天才前缀的VB代码块时On Error Resume Next
,我诅咒的不是VB.我想也许我应该这样做.但根据我的经验,一个决心在保险丝盒里放一分钱的人会找到一种方法.即使你清空他的口袋,他也会塑造他自己的便士.
我,我期待在C#和Python之间进行互操作的更有用的方法.我正在编写越来越多的代码来执行此操作.dynamic
对于那个特定的用例,这个关键词不可能很快到来,因为目前这样做的方式让我觉得我是20世纪50年代的苏联学者,他正在西部去参加一个会议:这里有很多规则和规则.在我离开之前的文书工作,我很确定有人会在我在那里的时候一直看着我,当我回到我身边的时候,大部分我会在边境带走我的东西.
有些人认为它是一种滥用的工具.就像VB中的"Option Strict Off"和"On Error Resume Next"一样,C#和Java之类的"纯粹"语言从未有过.
许多人对"var"关键字说了同样的话,但是一旦被理解为与VB的"Variant"不一样,我就不会看到它被滥用了.
它可能被滥用在懒惰的开发人员不希望对类进行类型检查的地方,只是尝试捕获动态调用而不是写"如果blah是Blah ......".
我个人认为它可以在我回答的最近这个问题的情况下正确使用.
我认为那些真正理解它的力量的是那些大量使用动态.NET语言的东西.
动态是坏的,因为像这样的代码将遍布整个地方:
public dynamic Foo(dynamic other) { dynamic clone = other.Clone(); clone.AssignData(this.Data); return clone ; }
代替:
public T Foo(T other) where T: ICloneable, IAssignData{ T clone = (T)other.Clone(); clone.AssignData(this.Data); return clone; }
第一个,没有静态类型信息,没有编译时检查,它不是自我记录,没有类型推断因此人们将被迫在调用站点使用动态引用来存储结果,导致更多的类型丢失,并且所有这螺旋式下降.
我已经开始害怕动态了.
编辑:危险已经过去了(P!)......而动态并没有被滥用,3年后没有必要投票给我:)
真正的陷阱?严重缺乏文件.整个应用程序的体系结构存在于编写它的人(或人)的脑海中.至少在强类型的情况下,您可以通过其类定义查看对象的作用.使用动态类型,您必须充分推断其使用的含义.在最坏的情况下,你没有IDEA对象是什么.这就像用JavaScript编写所有内容.ACK!