C# 太多的扩展方法会降低性能吗?工作原理
我是csharp 4的超级粉丝。。 作为扩展方法,我向字符串对象(.net类型)添加了太多方法 考虑大约200 这会降低性能吗 在.nets库中添加这些方法对吗?C# 太多的扩展方法会降低性能吗?工作原理,c#,.net,performance,c#-3.0,extension-methods,C#,.net,Performance,C# 3.0,Extension Methods,我是csharp 4的超级粉丝。。 作为扩展方法,我向字符串对象(.net类型)添加了太多方法 考虑大约200 这会降低性能吗 在.nets库中添加这些方法对吗? 扩展方法实际上是如何在内部工作的?无论如何,它不会影响运行时性能。因为“扩展方法”只是编译器的把戏。实际上,它们只是静态类中的静态方法 public static class MyExt { public static void MyExtension(this object obj) { //Do s
扩展方法实际上是如何在内部工作的?无论如何,它不会影响运行时性能。因为“扩展方法”只是编译器的把戏。实际上,它们只是静态类中的静态方法
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)代码>并且它只是一个方法调用而已。不必担心性能
如果您担心性能,我会说它不会影响“运行时性能”,尽管它可能会或可能不会影响编译时性能,但编译器需要确定在当前名称空间以及导入的名称空间中是否定义了任何扩展方法
但这并不难,因为编译器只需要检查静态类。没有一个库会有大量的“静态类”。无论如何,它不会影响运行时性能。因为“扩展方法”只是编译器的把戏。实际上,它们只是静态类中的静态方法
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)代码>并且它只是一个方法调用而已。不必担心性能
如果您担心性能,我会说它不会影响“运行时性能”,尽管它可能会或可能不会影响编译时性能,但编译器需要确定在当前名称空间以及导入的名称空间中是否定义了任何扩展方法
但这并不难,因为编译器只需要检查静态类。没有一个库会有大量的“静态类”。使用扩展方法不会导致性能下降,但是会有一种糟糕的扩展方法设计。这里有一篇关于扩展方法的应做和不应做的文章:使用扩展方法不会导致性能下降,但是会有一种糟糕的扩展方法设计。这里有一篇关于扩展方法的应做和不应做的文章:从编码/设计的角度来看,将这些方法添加到.net基本类型(如string、int、long等)中可以吗@vishalsharma运算符膨胀可以通过将扩展方法分发到适当的名称空间并有选择地导入这些名称空间来控制。但是,如果您经常使用基元类型,您可能会受到影响。@vishalsharma根据方法的用途,您可以将其分组到不同的名称空间中。有很多方法没有错。但是不要为System.Object
声明这些方法,将其与int
float
一起使用,在这种情况下,使用t
泛型以避免装箱。从编码/设计的角度来看,将这些方法添加到.net基本类型(如字符串、int、long等)是否可以@vishalsharma运算符膨胀可以通过将扩展方法分发到适当的名称空间并有选择地导入这些名称空间来控制。但是,如果您经常使用基元类型,您可能会受到影响。@vishalsharma根据方法的用途,您可以将其分组到不同的名称空间中。有很多方法没有错。但是不要为System.Object
声明这些方法,将其与int
float
一起使用,在这种情况下,使用t
泛型以避免装箱。从编码/设计的角度来看,将这些方法添加到.net基本类型(如字符串、int、long等)是否可以?从编码/设计的角度来看,将这些方法添加到.net基本类型(如string、int、long等)中可以吗?