为什么我要在静态类的静态函数中使用'this'到参数中的对象?我的意思是使用这两种方法之间的真正区别?
public static class Extensions
{
public static string AsJson(this object obj)
public static string AsJson2(object obj)
}
Run Code Online (Sandbox Code Playgroud)
public static string AsJson(this object obj)
Run Code Online (Sandbox Code Playgroud)
它是类型的扩展方法object
扩展方法被定义为静态方法,但是通过使用实例方法语法来调用.它们的第一个参数指定方法操作的类型,参数前面有this修饰符.
你的另一种方法只是一个简单的静态方法.
public static string AsJson2(object obj)
Run Code Online (Sandbox Code Playgroud)
他们的两个电话都是这样的:
Object obj = new object();
string str = obj.AsJson(); //extension method called
string str2 = Extensions.AsJson2(obj); //Normal static method called
string str3 = Extensions.AsJson(obj); //extension method called like a normal static method
Run Code Online (Sandbox Code Playgroud)
扩展方法被称为实例方法,但编译器实际上转换为对Static方法的调用
但是,编译器生成的中间语言(IL)会将您的代码转换为静态方法的调用.
所以
string str = obj.AsJson();
Run Code Online (Sandbox Code Playgroud)
翻译成
string str = Extensions.AsJson(obj);
Run Code Online (Sandbox Code Playgroud)
这就是为什么你可以真正做到:
object obj = null;
obj.AsJosn(); //Would not result in NRE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |