В процессе изучения заметил конструкцию метода:
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 реализована на их основе.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я новичокПисал программу пару недель, сейчас обнаружил, что основной файл проекта это Program
Есть такой код но я не могу понять зачем тут нужен я гуглил и так и не понял что делает: [Conditional("DEBUG")] ,ссылка от куда я брал код https://docsmicrosoft
Дорогие друзья! Сразу прошу прощения за мою неопытностьИмею две формы, в которых есть ListBox
Нужно сгруппировать все паллеты по сроку годности, отсортировать по возрастанию срока годности, в каждой группе отсортировать паллеты по весу