Программирование на C# - ООП C# - Передача параметров конструкторам

Программирование на C# - ООП C#

ООП С# - Передача параметров конструкторам

Вернемся к классу Authenticator. Представим, что мы хотим модифицировать этот класс так, чтобы можно было указывать начальный пароль при первоначальном создании экземпляра класса. Это можно сделать с помощью конструктора, принимающего параметры. В этом конструктор ведет себя, как метод — в том смысле, что вы можете определить для него любые параметры, и это дает ему значительные преимущества по сравнению с функциями Visual Basic Initialize или Form_Load.

Что касается Authenticator, попробуем добавить конструктор, принимающий начальное значение пароля в качестве параметра:

public class Authenticator
{
public Authenticator(string initialPassword)
{
password = initialPassword;
}
private string password = "";
private static uint minPasswordLength = 6;
... 


Выгода от использования такого конструктора состоит в том, что он гарантирует инициализацию каждого объекта Authenticator при его создании. И потому никакой другой код не может получить оступ к объекту до того, как он будет инициализирован, что было вполне возможно, если бы инициализация выполнялась вызовом какого-то метода уже после создания объекта. Теперь для создания объекта нужно использовать строку кода, подобную следующей:

Authenticator NewUser = new Authenticator("MyPassword45"); 


Здесь создается экземпляр со значением поля password, установленным в MyPassword45. Обратите внимание, что следующая строка теперь не будет компилироваться:

Authenticator NewUser = new Authenticator(); 


Это связано с тем, что здесь конструктору не передается никакого параметра, хотя конструктор требует одного параметра. Однако при желании вы можете просто создать перегрузку онструктора, не принимающую параметров, которая просто устанавливает пароль по умолчанию (хотя это не слишком безопасный подход).

Дополнительные сведения об использовании конструкторов

Хотя единственное, что мы делали в конструкторах до сих пор — это инициализировали значения полей, конструктор может вести себя подобно нормальному методу, поэтому в него можно поместить любые инструкции, которые вы пожелаете, например, выполнить некоторые вычисления, чтобы определить начальные значения полей. Если ваш класс инкапсулирует доступ к файлу или базе данных, в конструкторе можно попытаться открыть файл. Единственное, что невозможно сделать в конструкторе — вернуть из него какое-либо значение (например, указывающее состояние) вызывающему коду.

Другим новшеством является использование конструктора для подсчета количества экземпляров класса, созданных во время работы программы. Если мы пожелаем сделать это в классе Autheticator, то можем создать для этого статическое поле nInstancesCreated и соответствующим образом изменить код конструктора:

 
public class Authenticator
{
private static uint nInstancesCreated = 0;
public Authenticator(string initialPassword)
{
++nInstancesCreated;
Password = initialPassword;
}
private string password = 10;
private static uint minPasswordLength = 6;
... 


Этот пример не имеет большой практической ценности, но демонстрирует степень гибкости, которую обеспечивает возможность определения ваших собственных конструкторов. Подсчет экземпляров — это нечто такое, что вряд ли понадобится в окончательной версии кода, однако может оказаться полезным для отладки.

 

Комментарии  

+1 #2 Quasar 22.04.2011 15:48
Объясняет много аспектов ООП. Отлично!
Цитировать
+1 #1 Greek 18.04.2011 06:16
Очень хорошие примеры, для начинающих.
Цитировать

Добавить комментарий


Защитный код
Обновить