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

时间:2011-02-22 08:57:01

标签: c# .net syntax methods extension-methods

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

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

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

3 个答案:

答案 0 :(得分:13)

这意味着SomeMethod()Object类的extension method

定义它之后,您可以在任何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);

答案 1 :(得分:2)

这是你宣布extension method的方式。

这意味着您可以使用.SomeMethod为任何对象调用SomeMethod。 .之前的对象将是blah参数。

string s = "sdfsd";
Object result = s.SomeMethod(false);

扩展方法将适用于继承自this参数类型的所有类型,在本例中为对象。如果您有SomeMethod(this IEnumerable<T> enumerable),则所有IEnumerable<T>都可以使用List<T>

答案 2 :(得分:1)