在静态类中的静态方法参数中使用它?

bos*_*ski 0 c# static-methods

为什么我要在静态类的静态函数中使用'this'到参数中的对象?我的意思是使用这两种方法之间的真正区别?

public static class Extensions
{
    public static string AsJson(this object obj)
    public static string AsJson2(object obj)
}
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 5

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)