我是 csharp 4 的忠实粉丝。我在字符串对象(.net 类型)中添加了太多方法作为扩展方法,考虑到大约 200 会降低性能吗?
在.nets 库中添加这么多方法是否正确?扩展方法实际上是如何在内部工作的..?
我是 csharp 4 的忠实粉丝。我在字符串对象(.net 类型)中添加了太多方法作为扩展方法,考虑到大约 200 会降低性能吗?
在.nets 库中添加这么多方法是否正确?扩展方法实际上是如何在内部工作的..?
好吧,无论如何它都不会影响运行时性能。由于“扩展方法”只是编译器技巧。在引擎盖下,它们只是静态类中的静态方法。
public static class MyExt
{
public static void MyExtension(this object obj)
{
//Do something
}
}
public static void Main()
{
object obj = new object();
obj.MyExtension();
//Above line gets compiled into MyExt.MyExtension(obj);
}
如您所见,它obj.MyExtension();
被编译成MyExt.MyExtension(obj);
,它只是一个方法调用。无需担心性能。
如果您完全担心性能,我会说它不会损害“运行时性能”,尽管它可能会或可能不会损害编译时性能,编译器需要查找当前命名空间以及导入的命名空间中是否定义了任何扩展方法.
不过这并不难,因为编译器只需要检查static
类。没有图书馆会有很多“静态类”。
使用扩展方法没有性能损失,但是有一个不好的扩展方法设计。这里有一篇关于扩展方法的注意事项的很棒的文章:扩展方法的 DOS 和 DONTS。