你发现了什么扩展方法的优点?

C#的“非信徒”问我扩展方法的目的是什么。 我解释过,你可以将新方法添加到已经定义的对象中,特别是当你不拥有/控制原始对象的源时。

他提出了“为什么不给你的班级增加一种方法?” 我们一直在围绕(以一种好的方式)。 我的一般回应是,它是工具栏中的另一个工具,他的回答是无用的工具浪费......但我想我会得到一个更“开明”的答案。

您使用过的扩展方法的一些场景(您不可能拥有或不应该使用)添加到您自己的类中的方法?


我认为扩展方法在编写代码时有很大帮助,如果您将扩展方法添加到基本类型中,您将在智能感知中快速获取它们。

我有格式提供程序来格式化文件大小。 要使用它,我需要写:

Console.WriteLine(String.Format(new FileSizeFormatProvider(), "{0:fs}", fileSize));

创建一个扩展方法我可以写:

Console.WriteLine(fileSize.ToFileSize());

更清洁,更简单。


扩展方法的唯一优点是代码可读性。 而已。

扩展方法允许你这样做:

foo.bar();

代替这个:

Util.bar(foo);

现在C#中有很多这样的东西。 换句话说,C#中有许多功能看起来微不足道,并且本身并没有很大的好处。 然而,一旦你开始将这些特征结合在一起,你就会看到比它的部分总和大一点的东西。 LINQ对于扩展方法有很大的好处,因为没有它们,LINQ查询几乎是不可读的。 没有扩展方法的话,LINQ将是可能的,但不切实际。

扩展方法很像C#的部分类。 他们本身并不是很有帮助,看起来微不足道。 但是当你开始使用需要生成代码的类时,部分类开始变得更有意义。


不要忘记模具! 当您在类型Foo上添加扩展方法M时,您会在Foo的智能感知列表中获得'M'(假定扩展类在范围内)。 这使得'M'比MyClass.M(Foo,...)更容易找到。

在一天结束时,它只是其他地方的静态方法的语法糖,但像买房子一样:“位置,位置,位置!” 如果它挂在类型上,人们会发现它!

链接地址: http://www.djcxy.com/p/17439.html

上一篇: What Advantages of Extension Methods have you found?

下一篇: Trigger a keypress/keydown/keyup event in JS/jQuery?