是否在扩展方法 class 内调用扩展方法?
Calling extension methods inside extension method class or not?
在扩展方法内部,有时使用其他扩展方法是有意义的。我不确定你是否应该使用 "this" 语法。
public static class StringExtensions
{
// Foo vs Foo1
public static string Foo(this string s)
{
return s + "Foo" + s.Bar(); // "this" syntax
}
public static string Foo1(this string s)
{
return s + "Foo" + Bar(s);
}
public static string Bar(this string s)
{
return s + "Bar";
}
}
Foo
对比 Foo1
。出现两个问题:
- 性能。生成的
IL
代码有什么不同吗?
- 代码设计。这两种方法中哪一种更可取?为什么?
没有性能差异,因为扩展方法被编译为常规静态方法调用。
我会说 this
语法更可取,因为如果您将方法声明为扩展方法 (this string s
) - 最好总是 将其作为扩展方法调用,不要与常规静态调用混淆。
在扩展方法内部,有时使用其他扩展方法是有意义的。我不确定你是否应该使用 "this" 语法。
public static class StringExtensions
{
// Foo vs Foo1
public static string Foo(this string s)
{
return s + "Foo" + s.Bar(); // "this" syntax
}
public static string Foo1(this string s)
{
return s + "Foo" + Bar(s);
}
public static string Bar(this string s)
{
return s + "Bar";
}
}
Foo
对比 Foo1
。出现两个问题:
- 性能。生成的
IL
代码有什么不同吗? - 代码设计。这两种方法中哪一种更可取?为什么?
没有性能差异,因为扩展方法被编译为常规静态方法调用。
我会说
this
语法更可取,因为如果您将方法声明为扩展方法 (this string s
) - 最好总是 将其作为扩展方法调用,不要与常规静态调用混淆。