- •Вопрос 2) Понятие класса и объекта
- •Вопрос 3) Структура класса и синтаксис декларации класса
- •Вопрос 4) Доступ к членам класса. Закрытые и открытые члены класса.
- •Вопрос 5) Принцип инкапсуляции
- •Вопрос 6) Методы. Способы передачи параметров
- •Вопрос 7) Реализация методов класса. Конструкторы и деструкторы. Методы и их параметры
- •Конструкторы и деструкторы
- •Вопрос 8) Полиформизм, перегрузка методов
- •Виртуальные методы
- •Абстрактные классы
- •Вопрос 10) Интерфейсы c#
- •Вопрос 11) Классы и структуры Класс
- •Вопрос 12) Создание нового экземпляра класса.
- •13. Преобразование методов базового класса. Вызов методов базового класса.
- •Вопрос 14) Свойства и методы в ооп
- •Вопрос 15) События и методы в ооп События
- •Вопрос 16) Индексаторы с#
- •Вопрос 17) Делегаты в классах с#
- •Вопрос 18) Обобщенные классы или шаблоны.
Вопрос 14) Свойства и методы в ооп
Свойства в ООП.
Свойства служат для организации доступа к полям класса. Как правило, свойство связанно с закрытым полем класса и определяет его получение и установку.
Пример С#
Class counter
{
Private int count;
Public counter()
{
Count = 0;
}
Public counter(int c)
{
Count = c;
}
Public int Count
{
Get { return counter;}
Set{counter = value;}
}
}
Из примера выше видно что обработка установки поля полностью описывается программистом, что делает большой + т.к уменьшается вероятность поступление ошибочных данных в класс.
Значение спецификаторов для свойств аналогичны обычным спицификаторам доступа (public,prvate,protected). Чаще всего поля делают публичными ( public).
Код доступа предстовляет собой блоки операторов, которые выполняются при получении (get) или при установки (set) . Также свойство может быть доступно только для записи или только для чтение следовательно один из блоков будет просто отсутствовать пример:
Class counter
{
Private int count;
Public counter()
{
Count = 0;
}
Public counter(int c)
{
Count = c;
}
Public int Count
{
Get { return counter;}
}
}
Здесь после создания экземпляра класса мы уже не сможем установить значение свойству COUNT, оно доступно только для чтения.
Вопрос 15) События и методы в ооп События
События – это процедуры, которые выполняются всякий раз, когда это событие происходит. Например, событие OnChange компонента Edit происходит всякий раз, когда меняется текст в поле ввода. События находятся на вкладке Events Инспектора объектов. Если мы ничего не создадим, то при наступлении этого события ничего и не произойдет. Однако, если мы дважды щелкнем мышью по этому событию – создастся процедура обработки этого события. И тот программный код, который мы введем, будет выполняться всякий раз, когда это событие происходит.
Событие OnChange применяют довольно часто, когда нужно проверить правильные ли данные вводит пользователь. Хорошая новость – большинство событий (а также свойств и методов), у большинства компонентов одинаковы. Например, практически любой компонент для ввода пользователем текста имеет событие OnChange. Применяете ли вы Edit или Memo, это событие работает одинаково.
Методы.
Мутоды это функции обесппечивающие работу в с полями объекта. Также методы могут быть закрыты и использоватся для вычисления промежуточных значений внутри объекта.
Есть два способа передачи параметров в метод:
По значению, при этом внутри метода будет создана копия параметра и изменение переменной переданной в метод не будет влиять на переменную в вызывающем окружении
По ссылки, Это значит что в метод будет передан только адрес в ОП по которому находится значение переменной. Следовательно что любое изменение переменной внутри метода изменить значение перменной и в вызывающем окружении.
Также метод может быть статичиским, что это значит:
Это значит что мы можем описать в классе метод для работы снашим классом, и чтобы не создовать еще один объект в который мы передадим уже существующий объект для вычисление каких либо данных. А вызовем статичиский метод без создание экземпляра класса и передадим уже в качестве параметра наш объект, статичииский метод вернет нам результат вычисления.
Метод может быть перегружен, это означает что в классе определенно несколько методолв с одним и темже названием, но методы различаются по аргументам, которые им передаются. Компилятор сам определяет какой из методов ему нужно выбрать. Ниже в примере будет показанно на премере перегруженного конструктора.
Пример СИ++:
Класс английских длинн
Class test
{
Private:
Int feet;
Float inches;
Public:
Test() // конструктор без параметров
{
Feet=0;
Inches = 0;
}
Test(int f,float i) // конструктор с параметрами
{
Feet = f;
Inches = I;
}
Void ShowTest()
{
Cout<<feet<<” - ”<<inches<<endl;
}
Static test AddSixInches(test *t1) // добавить 6 дюймов
{
Float I = t1->inches;
Int f = t1->feet
I+=6;
If(i>12){
F++;
I - =12;
}
T1->feet = f;
T1->inches =I;
}
}
Void main()
{
Test d1(5,7);
D1.ShowTest(); // выведет 5-7
Test::AddSixInches(&d1);
D1.ShowTest(); // выведет 6-1
}
События примеры на С#
События – это элемент класса позволяющий ему посылать сообщения другим объектам уведомления об изменении своего состояния. При этом для объектов являющихся наблюдателями события, активируется обработчик данного события. Обработчики должныбыть зарегистрированы в объекте-источнике события.
События построены на основе делегатов: с помощью делегатов вызываются методы-обработчики событий. По этому создания события в классе состоит из следующих частей:
Описание делегата, задающего сигнатуру обработчиков событий
Описание события
Описания метода (методов), инициирующих событие
Синтаксис:
[атрибуты] [спецификатор ] event [тип] [ имя события]
Могут использоватся следующие спецификаторы: new,public,protected,internal,private,static,virtual,sealed,override,abstract,extern.
Тип – это тип делегата на котором основано событие.
Пример:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace @event
{
class Program
{
delegate void handler(); // делегат для добавления обработчиков события
class Sender
{
public event handler event_; // События
public void Send() // метод вызова событий
{
Console.WriteLine("Сообщение отправлено всем наблюдателям");
if (event_ != null) event_();
}
}
class Recipient1
{
public void rec() // Обработчик события
{
Console.WriteLine("Получил сообщение");
}
}
class Recipient2
{
public void rec() // Обработчик события
{
Console.WriteLine("Я тоже получил сообщение");
}
}
static void Main(string[] args)
{
Recipient1 rec1 = new Recipient1();
Recipient2 rec2 = new Recipient2();
Sender send = new Sender();
send.event_ += new handler(rec1.rec); // Регистрируем обработчик события
send.event_ += new handler(rec2.rec); // Регистрируем обработчик события
send.Send(); // Вызов событий
Console.Read();
}
}
}
Вывод:
Сообщение отправлено всем наблюдателям
Получил сообщение
Я тоже получил сообщение