В процессе изучения заметил конструкцию метода:
public void myMethod(this int[] array)
{
// ignore
}
Подскажите, какая роль ключевого слова this в данной ситуации?
Это метод расширения (Extension Method)
Методы расширения позволяют "добавлять" методы в существующие типы без создания нового производного типа, перекомпиляции и иного изменения первоначального типа. Методы расширения представляют собой особую разновидность статического метода, но вызываются так же, как методы экземпляра в расширенном типе. Для клиентского кода, написанного на языках C#, F# и Visual Basic, нет видимого различия между вызовом метода расширения и вызовом методов, фактически определенных в типе.
Это значит, что вы можете вызвать
MyClass myClass = new MyClass();
int i = myClass.Foo();
вместо
MyClass myClass = new MyClass();
int i = Foo(myClass);
Это позволяет сделать "текучий интерфейс" (fluent interface)
Вот здесь показан пример
какая роль ключевого слова this в данной ситуации?
То определение метода, что вы привели не имеет никакого смысла, и скорее всего выдаст ошибку компиляции. Наверно вы потеряли static и имели ввиду это
public static void MyMethod(this int[] array)
{
// ignore
}
Это уже похоже на определение метода расширения. Чтобы точно стать таковым, он должен располагаться в статическом классе.
public static class MyExtensions
{
public static void myMethod(this int[] array)
{
// ignore
}
}
Теперь в пространстве имён, в котором объявлен MyExtensions и во всех модулях, в которые будет добавлен using этого пространства имён, у массивов int появится метод MyMethod()
var arr = new int[4]{0,1,2,3};
arr.MyMethod();
При выполнении метода в качестве первого аргумента выступит собственно сам массив. Если бы вы добавили еще параметров в MyMethod(), то они получали бы аргументы из оператора вызова ().
Нужно иметь ввиду, что методы расширения это приём нарушающий классические ООП принципы. Но в тоже время такая замечательная вещь как LINQ реализована на их основе.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей