Конструкторы. private void SomeOperation()

Public class A

{ private int x;

private int y;

private static int z;

private void SomeOperation()

{ x = 1;

this.y = 2;

z = 3;

// Присваивание this в объектах является ошибкой

// A newinstance = new A();

// this = newinstance;

}

static void Main()

{ A obj = new A();

obj.SomeOperation();

System.Console.WriteLine("x = {0}, y = {1}, z = {2}",

obj.x, obj.y, A.z);

// Вывод: x = 1, y = 2, z = 3

Console.ReadLine(); // Ожидание нажатия клавиши <Enter>

}

}

В методе Main создается новый экземпляр класса A и затем вызывается метод SomeOperation через экземпляр этого класса. Внутри тела метода SomeOperation имеется доступ к полям экземпляра и статическим полям класса, поэтому присваивать им значения можно просто с использованием их идентификаторов. Несмотря на то что, как уже упоминалось, в методе SomeOperation можно присваивать значение статическому члену z, не квалифицируя его, для достижения лучшей читабельности кода во время присваивания значений следует квалифицировать статические поля даже в методах, относящихся к тому же самому классу. Это поможет тем, кому придется сопровождать код.

Обратите внимание, что при присваивании значения поле у снабжается префиксом – идентификатором this. С помощью this можно обращаться к полям экземпляра, как было показано в предыдущем примере кода. Поскольку значение this доступно только для чтения, ему нельзя присвоить что-либо, что заставит его ссылаться на другой экземпляр. При попытке сделать это компилятор сообщит об ошибке, и код не скомпилируется.

Перегрузка метода.

Класс может иметь несколько реализаций или перегрузок одного и того же метода, которые отличаются от других числом или типами параметров. Например:

public int sampleMethod(string sampleParam)

{ // Код, использующий данные типа string

};

public int sampleMethod(int sampleParam)

{ // Код, использующий данные типа int

}

Как правило, метод объявляется при определении класса. Однако C# и Visual Basic также поддерживают методы расширения, которые позволяют добавлять методы в существующий класс вне определения класса.

Конструкторы вызываются при первоначальной загрузке класса средой CLR или при создании объекта [5]. Существуют два типа конструкторов: статические конструкторы и конструкторы экземпляра. Класс может иметь только один статический конструктор, не имеющий параметров. Он вызывается, когда CLR загружает тип. Имя статического конструктора должно совпадать с именем класса, к которому он принадлежит. Как и к любому другому члену класса, к статическому конструктору можно присоединять атрибуты метаданных.

С другой стороны, конструкторы экземпляра вызываются при создании экземпляра класса. Обычно они устанавливают состояние объекта за счет инициализации полей в желательное предопределенное состояние. Можно также предпринять любые другие действия по инициализации, такие как подключение к базе данных и открытие файла. У класса может быть несколько конструкторов экземпляра, которые могут быть перегружены (т.е. иметь разные типы параметров). Подобно статическим конструкторам, конструкторы экземпляра именуются по названию определяющего их класса. Особенность таких конструкторов состоит в необязательности выражения инициализатора. С помощью инициализатора, который следует за двоеточием после списка параметров, можно вызвать конструктор базового класса или другой конструктор того же класса, указывая, соответственно, ключевые слова base и this. О ключевом слове base пойдет речь в разделе "Ключевое слово base " далее в главе. Рассмотрим следующий пример кода с двумя комментариями:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: