Что означает «это» в объявлении статического метода? - PullRequest
6 голосов
/ 22 февраля 2011

Я видел некоторый код, который использует ключевое слово this в объявлении параметра функции. Например:

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

Что означает слово this в этом контексте?

Ответы [ 3 ]

13 голосов
/ 22 февраля 2011

Это означает, что 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 голосов
/ 22 февраля 2011

Это способ объявления метода расширения .

Это означает, что вы можете вызывать SomeMethod с .SomeMethod для любого объекта.Объект перед . будет параметром бла.

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

Метод расширения будет доступен для всех типов, унаследованных от типа параметра this, в данном случае объекта.Если у вас есть SomeMethod(this IEnumerable<T> enumerable), он будет доступен на всех IEnumerable<T>: например, List<T>.

1 голос
/ 22 февраля 2011
...