静态方法声明中"this"是什么意思?

Yoc*_*mer 6 .net c# methods syntax extension-methods

我见过一些this在函数参数声明中使用关键字的代码.例如:

public static Object SomeMethod( this Object blah, bool blahblah)
Run Code Online (Sandbox Code Playgroud)

this在这种情况下,这个词意味着什么?

Bol*_*ock 13

这意味着SomeMethod()是一种扩展方法Object类.

定义它之后,您可以在任何Object实例上调用此方法(尽管它已被声明static),如下所示:

object o = new Object();
bool someBool = true;

// Some other code...

object p = o.SomeMethod(someBool);
Run Code Online (Sandbox Code Playgroud)

this Object参数引用您调用它的对象,实际上并未在参数列表中找到.

static在您将其称为实例方法时声明它的原因是因为编译器将其转换为IL中的实际静态调用.虽然这很深入,所以我不会详细说明,但这也意味着你可以将它称为任何静态方法:

object o = new Object();
bool someBool = true;

// ...

object p = ObjectExtensions.SomeMethod(o, someBool);
Run Code Online (Sandbox Code Playgroud)