Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Доступ к членам класса и наследование
Если сделать закрытыми переменные класса TwoDShape, они станут недоступными в классе Triangle, как показано ниже. // Доступ к закрытым членам класса не наследуется. // Этот пример кода не подлежит компиляции. using System; // Класс для двумерных объектов. class TwoDShape { double Width; // теперь это закрытая переменная double Height; // теперь это закрытая переменная public void ShowDim() { Console.WriteLine("Ширина и высота равны " + Width + " и " + Height); } } // Класс Triangle, производный от класса TwoDShape. class Triangle: TwoDShape { public string Style; // тип треугольника // Возвратить площадь треугольника. public double Area() { return Width * Height / 2; // Ошибка, доступ к закрытому члену класса запрещен } // Показать тип треугольника. public void ShowStyle() { Console.WriteLine("Треугольник " + Style); } } На первый взгляд, ограничение на доступ к частным членам базового класса из производного класса кажется трудно преодолимым, поскольку оно не дает во многих случаях возможности пользоваться частными членами этого класса. Но на самом деле это не так. Для преодоления данного ограничения в C# предусмотрены разные способы. Один из них состоит в использовании защищенных (protected) членов класса, рассматриваемых в следующем разделе, а второй — в применении открытых свойств для доступа к закрытым данным. Как пояснялось в предыдущей главе, свойство позволяет управлять доступом к переменной экземпляра. Например, с помощью свойства можно ввести ограничения на доступ к значению переменной или же сделать ее доступной только для чтения. Так, если сделать свойство открытым, но объявить его базовую переменную закрытой, то этим свойством можно будет воспользоваться в производном классе, но нельзя будет получить непосредственный доступ к его базовой закрытой переменной. //использовать открытые свойства для установки и получения значений закрытых членов класса. using System; //класс для двумерных обьектов. class TwoDShape { double pri_width; //теперь это закрытая переменна. double pri_heigth;//теперь это закрытая переменная. //свойства ширины и высоты двумерного обьекта. public double Width { get { return pri_width; } set { pri_width = value < 0? -value: value; } } public double Heigth { get { return pri_heigth; } set { pri_heigth = value < 0? -value: value; } } public void ShowDim() { Console.WriteLine("Ширина и высота равны " + Width + " и " + Heigth); } } //класс для треугольников, производный от класса TowDShape. class Triangle: TwoDShape { public string Style;//тип треугольника // Возвратить площадь треугольника. public double Area() { return Width * Heigth / 2; } //показать тим треугольника. public void ShowStyle() { Console.WriteLine("Треугольник " + Style); } } class Shapes2 { static void Main() { Triangle t1 = new Triangle(); Triangle t2 = new Triangle(); t1.Width = 4.0; t1.Heigth = 4.0; t1.Style = "равнобедренный"; t2.Width = 8.0; t2.Heigth = 12.0; t2.Style = "прямоугольный"; Console.WriteLine("Сведения об обьекте t1: "); t1.ShowStyle(); t1.ShowDim(); Console.WriteLine("Площадь равна "+t1.Area()); Console.WriteLine(); Console.WriteLine("Сведения об обьекте t2: "); t2.ShowStyle(); t2.ShowDim(); Console.WriteLine("Площадь равна " + t2.Area()); } } Базовый и производный классы иногда еще называют суперклассом и подклассом соответственно. Date: 2015-09-02; view: 437; Нарушение авторских прав |