在静态方法声明中,“this”是什么意思?

6

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

public static Object SomeMethod( this Object blah, bool blahblah)

在这个语境中,this 这个词是什么意思?
3个回答

13

这意味着SomeMethod()Object类的一个扩展方法

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

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

// Some other code...

object p = o.SomeMethod(someBool);

this Object参数指的是在其上调用它的对象,并且实际上并不在参数列表中。

尽管您像调用实例方法一样调用它,但它声明为static是因为编译器将其转换为IL中的真正静态调用。这项技术很深奥,我就不详细解释了,但这也意味着您可以像调用任何静态方法一样调用它:

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

// ...

object p = ObjectExtensions.SomeMethod(o, someBool);

2
这是声明一个扩展方法的方式:扩展方法
这意味着您可以为任何对象使用.SomeMethod调用SomeMethod。在.之前的对象将成为blah参数。
string s = "sdfsd";
Object result = s.SomeMethod(false);

扩展方法将适用于继承自this参数类型的所有类型,即object类型。如果你有SomeMethod(this IEnumerable<T> enumerable),它将适用于所有IEnumerable<T>类型,例如List<T>



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接