Доброго времени суток всем тем, кто по какой бы не было причине оказался на странице моего блога. Сегодня у меня появилось желание рассказать о том что же такое атрибуты доступа private, public и protected для элементов класса на примере языка программирования C#. Остальные ОО языке в принципе ни чем и не отличаются…
Для начала немного по умничаем и поговорим о таком умном слове как инкапсуляция.
Инкапсуляция — одна из главных составляющих объекто-ориентированного программирования, смысл которой заключается в определении атрибута доступа к элементам внутри класса. Другими словами это механизм, позволяющий четко определить какие данные по сути играют роль внутренних состояний объекта, а какие являются общедоступными.
В языке программирования C#, да и во всех других ОО-языках выделяют три атрибута доступа: public, private, protected.
Public — определяет элемент как общедоступный. обратиться к данной переменной или функции можно как в рамках класса, так и путем создания экземпляра класса.
Private (по умолчанию) — определяет элемент как закрытый для доступа, обратиться к данной переменной или функции можно только в рамках нашего класса.
Protected — определяет элемент как закрытый для доступа, обратиться к данной переменной или функции можно только в рамках нашего класса, а так же в классе наследнике.
Например:
class MyClass { int a; //по умолчанию private private int sum(int b) { return this.a + b + this.x; } protected int x = 5; public void ShowSum(int b) { MessageBox.Show(this.sum(b).ToString()); } public MyClass() { this.a = 0; } public MyClass(int a) { this.a = a; } } class MySecondClass: MyClass { public MySecondClass(int x) { //this.a = x; - это не верная строка //переменная 'a' и функция 'sum' в наследнике не доступны this.x = x; this.ShowSum(this.x); } }
И выполним код:
MyClass MC = new MyClass(1); MC.ShowSum(4); //Выведет 10 MySecondClass MSC = new MySecondClass(10); //Выведет 20 //int x1 = MC.x; - ошибка //int x2 = MSC.x; - ошибка
Теперь немного опишем почему в первом случае мы получаем 10, а во втором 20. Первая строка создает нам экземпляр класса ‘MyClass‘ и присваивает переменной ‘a‘ значение 1. Вторая строка, показывает результат скрытой функции ‘sum‘ с аргументом b=4, которая по сути складывает числа 1, 5 и 4 (a=1, x=5, b=4). Третья строка создает объект класса ‘MySecondClass‘ и сразу покажет нам результат функции ‘sum‘. Который является результатом сложения 0, 10 и 10 (a=0, x=10, b=10). Стоит отметить что a=0 берется из класса родителя, а точнее из конструктор по умолчанию ‘public MyClass()‘, так же стоит заметить что ни к переменной ‘a‘ ни к функции ‘sum‘ обращаться в классе ‘MySecondClass‘ напрямую мы не можем.
Вот как то так. Надеюсь что мое описание было доступным даже самым неопытным программистам, только начинающим изучать технологию объекто-ориентированного прграммирования.