Примеры использования модификаторов доступа
Пример 1:Создадим класс State
public class State
{
int a; // все равно, что private int a;
private int b; // поле доступно только из текущего класса
protected int c; //доступно из текущего класса и производных классов
internal int d; // доступно в любом месте программы
protected internal int e; // доступно в любом месте программы и из классов-наследников
public int f; // доступно в любом месте программы, а также для других программ и сборок
private void Display_f()
{ Console.WriteLine("Переменная f = {0}", f); }
public void Display_a()
{ Console.WriteLine("Переменная a = {0}", a); }
internal void Display_b()
{ Console.WriteLine("Переменная b = {0}", b); }
protected void Display_e()
{ Console.WriteLine("Переменная e = {0}", e); }
}
Так как класс State объявлен с модификатором public, он будет доступен из любого места программы, а также из других программ и сборок. Класс State имеет пять полей для каждого уровня доступа. Плюс одна переменная без модификатора, которая является закрытой по умолчанию.
Также имеются четыре метода, которые будут выводить значения полей класса на экран. Обратите внимание, что так как все модификаторы позволяют использовать члены класса внутри данного класса, то и все переменные класса, в том числе закрытые, у нас доступны всем его методам, так как все находятся в контексте класса State.
Теперь посмотрим, как мы сможем использовать переменные нашего класса в программе
class Program
{
static void Main(string[] args)
{
State state1 = new State();
// Присвоить значение переменной a у нас не получиться, так как она закрытая и класс Program ее не видит и данную строку среда подчеркнет как неправильную
state1.a = 4; // Ошибка, получить доступ нельзя то же самое относится и к переменной b
state1.b = 3; // Ошибка, получить доступ нельзя присвоить значение переменной с то же не получиться, так как класс Program не является классом-наследником класса State
state1.c = 1; // Ошибка, получить доступ нельзя переменная d с модификатором internal доступна из любого места программы поэтому спокойно присваиваем ей значение
state1.d = 5;
// Переменная e так же доступна из любого места программы
state1.e = 8;
// Переменная f общедоступна
state1.f = 8;
// Попробуем вывести значения переменных. Так как этот метод объявлен как private, мы можем использовать его только внутри класса State
state1.Display_f() ; // Ошибка, получить доступ нельзя так как этот метод объявлен как protected, а класс Program не вляется наследником класса State
state1.Display_e(); // Ошибка, получить доступ нельзя
state1.Display_a(); // Общедоступный метод
state1.Display_b(); // Метод доступен из любого места программы
Console.ReadLine();
}
}
Таким образом, мы смогли установить только переменные d, e и f, так как их модификаторы позволяют использовать в данном контексте. И нам оказались доступны только два метода: state1.Display_a() и state1.Display_b(). Однако, так как значения переменных a и b не были установлены, то эти методы выведут нули, так как значение переменных типа int по умолчанию инициализируются нулями.
Несмотря на то, что модификаторы public и internal похожи по своему действию, но они имеют большое отличие. Классы и члены класса с модификатором public также будут доступны и другим программам, если данных класс поместить в динамическую библиотеку dll и потом ее использовать в этих программах.
Благодаря такой системе модификаторов доступа можно скрывать некоторые моменты реализации класса от других частей программы. Такое сокрытие называется инкапсуляцией.
Контрольные вопросы:
1.Что такое модификатор доступа?
2.Назовите основные модификатор доступа и опишите их.
Дата добавления: 2015-10-26; просмотров: 848;