当前位置:  开发笔记 > 编程语言 > 正文

C#4动态关键字 - 为什么不呢?

如何解决《C#4动态关键字-为什么不呢?》经验,为你挑选了4个好方法。

在阅读了对该主题的许多回复之后,我发现很多不喜欢它的人都会引用滥用新关键字的可能性.我的问题是,什么样的滥用?怎么会这么严重地被滥用,以至于让人们激烈地不喜欢它呢?这只是纯粹主义吗?或者是否有一个我只是没有看到的真正陷阱?



1> Robert Rossn..:

我认为人们对此功能表达的很多反感归结为"这是一种糟糕的语言功能,因为它会让糟糕的开发人员编写错误的代码." 如果您考虑一下,按照这种逻辑,所有语言功能都很糟糕.

当我遇到某个天才前缀的VB代码块时On Error Resume Next,我诅咒的不是VB.我想也许我应该这样做.但根据我的经验,一个决心在保险丝盒里放一分钱的人会找到一种方法.即使你清空他的口袋,他也会塑造他自己的便士.

我,我期待在C#和Python之间进行互操作的更有用的方法.我正在编写越来越多的代码来执行此操作.dynamic对于那个特定的用例,这个关键词不可能很快到来,因为目前这样做的方式让我觉得我是20世纪50年代的苏联学者,他正在西部去参加一个会议:这里有很多规则和规则.在我离开之前的文书工作,我很确定有人会在我在那里的时候一直看着我,当我回到我身边的时候,大部分我会在边境带走我的东西.



2> TheSoftwareJ..:

有些人认为它是一种滥用的工具.就像VB中的"Option Strict Off"和"On Error Resume Next"一样,C#和Java之类的"纯粹"语言从未有过.

许多人对"var"关键字说了同样的话,但是一旦被理解为与VB的"Variant"不一样,我就不会看到它被滥用了.

它可能被滥用在懒惰的开发人员不希望对类进行类型检查的地方,只是尝试捕获动态调用而不是写"如果blah是Blah ......".

我个人认为它可以在我回答的最近这个问题的情况下正确使用.

我认为那些真正理解它的力量的是那些大量使用动态.NET语言的东西.


如果程序员对变量名称很懒,它只会降低可见性....或者只是懒得看起来没有=新栏()我觉得它通过删除声明对象类型的重复噪声来增加可见性两次,一个是变量的左边和右边.此外,正如Martin Fowler所说:"任何傻瓜都可以编写计算机可以理解的代码.优秀的程序员编写人类可以理解的代码." 亲爱的戴夫
var以不同的方式被滥用 - 它降低了可读性,而不是安全性.
当然"var"增加了可读性.我编写的数百个文件在一个函数中使用了StringBuilder,但我不一定要在我的文件顶部导入"System.Text".所以现在使用var,我可以这样做:var builder = new System.Text.StringBuilder(); System.Text.StringBuilder builder = new System.Text.StringBuilder();

3> Pop Catalin..:

动态是坏的,因为像这样的代码将遍布整个地方:

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年后没有必要投票给我:)


您认为可能会鼓励人们不必要地编写动态代码?什么可能会阻止他们?

4> Robert C. Ba..:

真正的陷阱?严重缺乏文件.整个应用程序的体系结构存在于编写它的人(或人)的脑海中.至少在强类型的情况下,您可以通过其类定义查看对象的作用.使用动态类型,您必须充分推断其使用的含义.在最坏的情况下,你没有IDEA对象是什么.这就像用JavaScript编写所有内容.ACK!


公平地说,这已经有点可能了:界面繁重的C#程序可以确定给定调用的实际实现是一种挫折,充满猜测和全文搜索.
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有