Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Функциональные элементы класса
2.1. Данные: поля и константы Данные, содержащиеся в классе, могут быть переменными или константами. При описании данных также можно указывать атрибуты и спецификаторы, задающие различные характеристики элементов. Синтаксис описания элемента данных: [атрибуты] [спецификаторы] [const] тип имя [ = начальное_значение ] Возможные спецификаторы для данных представлены в приложении 10. По умолчанию элементы класса считаются закрытыми private. Для полей класса этот вид доступа является предпочтительным, поскольку поля определяют внутреннее строение класса, которое должно быть скрыто от пользователя. Все методы класса имеют непосредственный доступ к его закрытым полям. Поля, описанные со спецификатором static, а также константы существуют в единственном экземпляре для всех объектов класса, поэтому к ним обращаются не через имя экземпляра, а через имя класса. Обращение к полю класса выполняется с помощью операции доступа. Справа от точки задается имя поля, слева – имя экземпляра для обычных полей или имя класса для статических. Пример: Создание класса Demo и два способа обращения к его полям. class Circle { public int x=0; public int y=0; public int radius=3; public const double pi = 3.14; public static string name = " Окружность"; double p; double s; } class Program { static void Main() { Circle cr = new Circle(); //создание экземпляра класса Console.WriteLine(" pi=" +Circle.pi); //обращение к константе Console.Write(Circle.name); //обращение к статическому полю //обращение к обычным полям Console.WriteLine(" с центром в точке ({0}, {1}) и радиусом {2}", cr.x, cr.y, cr.radius); // Console.WriteLine(cr.p); - вызовет ошибку, т.к. поле p, c имеют тип private Console.Write(" Введите коэффициент="); int kof = int.Parse(Console.ReadLine()); cr.x -= kof; cr.y += kof; cr.radius *= kof; Console.WriteLine(" Новая окружность с центром в точке ({0}, {1}) и радиусом {2}", cr.x, cr.y, cr.radius); //cr.s = 2 * Circle.pi * cr.radius; - вызовет ошибку, т.к. поле s, c имеют тип private } } Методы Методы находятся в памяти в единственном экземпляре и используются всеми объектами одного класса совместно, поэтому необходимо обеспечить работу методов нестатических экземпляров с полями именно того объекта, для которого они были вызваны. Для этого в любой нестатический метод автоматически передается скрытый параметр this, в котором хранится ссылка на вызвавший функцию экземпляр. В явном виде параметр this применяется для того, чтобы возвратить из метода ссылку на вызвавший объект, а также для идентификации поля в случае, если его имя совпадает с именем параметра метода, например: class Circle { public int x=0, y=0, radius=3; public const double pi = 3.14; public static string name = " Окружность"; public Circle T()//метод возвращает ссылку на экземпляр класса { return this; } public void Set(int x, int y, int r) { this.x = x; this.y = y; radius=r; } } class Program { static void Main() { Circle cr = new Circle(); //создание экземпляра класса Console.WriteLine(" pi=" +Circle.pi); //обращение к константе Console.Write(Circle.name); //обращение к статическому полю //обращение к обычным полям Console.WriteLine(" с центром в точке ({0}, {1}) и радиусом {2}", cr.x, cr.y, cr.radius); cr.Set(1, 1, 10); Console.WriteLine(" Новая окружность с центром в точке ({0}, {1}) и радиусом {2}", cr.x, cr.y, cr.radius); Circle b=cr.T(); //получаем ссылку на объект cr, аналог b=c Console.WriteLine(" Новая ссылка на окружность с центром в точке ({0}, {1}) и радиусом {2}", b.x, b.y, b.radius); } }
|