Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 2. Наследование.doc
Скачиваний:
5
Добавлен:
15.11.2019
Размер:
273.92 Кб
Скачать

Ссылки на самого себя

В определениях пользовательских конструкторов часто используется зарезервированное слово 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) — доступные только из данной сборки.