我见过一些在函数参数声明中使用关键字this
的代码。例如:
public static Object SomeMethod( this Object blah, bool blahblah)
this
这个词在这种情况下意味着什么?
答案 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)