Определение открытого интерфейса по умолчанию
Ссылки на самого себя
В определениях пользовательских конструкторов часто используется зарезервированное слово this:
// В С#, как и в C++, и в Java, предусмотрено использование зарезервированного
// слова this
public Employee(string fullName, int empID, float currPay)
{
this.full Name = fullName;
this.empID = empID;
this.currPay = currPay;
}
В С# слово this используется для ссылки на текущий экземпляр объекта. В Visual Basic схожие функции выполняет зарезервированное слово Me, а программисты, использующиеС++ и Java, вообще должны почувствовать себя каг дома, поскольку в этих языках также есть слово this, выполняющее те же функции.
Главная причина, по которой в конструкторах используется слово this, — желание избежать конфликтов между именами принимаемых параметров и именам внутренних переменных-членов класса. Конечно же, такого конфликта можно избежать и более простым способом — определить для принимаемых переменных имена, отличные от имен переменных-членов класса. Кроме того, необходимо помнить,_что через указатель this невозможно обратиться к статическим функциям-членам. Причина очевидна: такие функции принадлежат не отдельным объектам класса, а всему классу в целом.
|
|
Открытый интерфейс по умолчанию для класса (default public interface) — это набор открытых членов данного класса. С точки зрения обращения к членам класса из остальной части программы открытый интерфейс по умолчанию — это набор тех переменных, свойств и методов — членов, к которым можно обратиться в формате «имя_объекта.член_класса». С точки зрения определения класса — это набор тех членов класса, которые объявлены с использованием ключевого слова publiс. В С# открытый интерфейс по умолчанию для класса может состоять из следующих членов этого класса:
· методов — наборов действий, определенных как единое целое, с помощью которых реализуется поведение данного класса;
· свойств — «переодетых» функций для получения данных и их изменения;
· полей: открытых переменных-членов (как правило, использование таких переменных — не самый лучший вариант, но в С# они поддерживаются).
Открытый интерфейс класса по умолчанию может также быть настроен таким образом, чтобы поддерживать события. Однако сейчас мы оставим события в стороне и сконцентрируемся на использовании свойств, методов и полей.
Перед тем как углубиться в новые варианты нашего примера с сотрудником, нам необходимо разобраться с областями видимости для типов. В предыдущих главах мы много раз встречались с определениями классов вида:
class HelloClass
{
// Любое количество методов с любым количеством параметров
// Конструктор по умолчанию и пользовательские конструкторы
|
|
// Если в этом классе определена и точка входа для всей программы.
// то еще и статический метод Main()
}
Как мы помним, для каждого члена класса необходимо указать (или принять значение по умолчанию,) область видимости с помощью одного из следующих ключевых слов: public, private, protected и internal. Однако область видимостизадает-ся не только для членов класса, но и для самих классов! Разница между областью видимости для членов классов и областью видимости для самих классов заключается в том, что в первом случае мы определяем те члены класса, которые будут доступны через экземпляры объектов, а во втором — те области программы, из которых будет возможно обращение к данным классам.
Для класса в С# используется только два ключевых слова для определения области видимости: publiс и internal. Объекты классов, определенных как public (открытых), могут быть созданы как из своего собственного двоичного файла, так и из других двоичных файлов С# (то есть из другой сборки). Если переопределять HelloClass как public, то это можно сделать следующим образом:
// Теперь этот класс можно создавать из-за пределов сборки, в которой он определен
public class HelloClass
{
// Любое количество методов с любым количеством параметров
// Конструктор по умолчанию и пользовательские конструкторы
// Если в этом классе определена и точка входа для всей программы,
// то еще и статический метод Main()
}
Если вы не указали явно область видимости для класса, то по умолчанию этот класс будет объявлен как internal (внутренний). Объекты таких классов могут создаваться только объектами из той же сборки, в которой они были определены. Внутренние классы часто рассматриваются как вспомогательные (helper classes), поскольку они используются типами данной сборки для помощи в выполнении каких-либо действий.
// Внутренние классы могут использоваться только внутри той сборки,
//в которой они определены
internal class HelloClassHelper
{
.....
}
Классы — это не единственные пользовательские типы данных, для которых существует атрибут области видимости. Как мы помним, тип — это общий термин, который используется в отношении классов, структур, перечислений, интерфейсов и делегатов. Атрибут видимости (public или internal) может быть установлен для любого типа С#, например:
Все рассмотренные выше типы можно для наглядности собрать в единую схему (рис. 3.2):
Рис. 3.2. Внутренние и открытые типы
Вопросы, связанные с созданием сборок.NET, рассматриваются в главе 6. Сейчас же нам достаточно помнить, что все типы данных в С# могут объявляться как открытые (public) — доступные из-за пределов собственной сборки, и как закрытые (private) — доступные только из данной сборки.