Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПИ лекции.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
120 Кб
Скачать

События (event)

События – реакция программы на действия пользователя или другой программы или внешней среды.

События являются методами, т.е. у событий могут быть аргументы и возвращаемые значения. Метод, реагирующий на события, называется обработчиком события.

class MyButtonClass : Form

{

private Button mrButton;

public MyButtonClass()

{

mrButton = new Button();

mrButton.Click += new System.EventHandler(MyButtonClickEventHandler);

this.Controls.Add(mrButton)

}

static void Main()

{

Application.Run(new MyButtonClass());

}

void MyButtonClickEventHandler(object sender, EventArgs e)

{

MrButton.Text = "Push";

}

}

Обработчик нажатия кнопки называется MyButtonClickEventHandler – метод должен запускаться каждый раз, когда происходит нажатие на кнопку. Сейчас необходимо связать событие Click (нажатие на кнопку) с методом обработчика событий.

Для создания собственных событий используется специальный класс – delegate.

Пространство имен

Имена многих базовых классов и имена классов из используемых библиотек весьма обширны. Когда используется многоуровневое наследование приходится описывать всю цепочку имен для использования какого-либо класса. Для этого придумана организация файлов с помощью пространства имен.

Пространство имен содержит классы одной тематики.

Пространства имен могут обобщаться в еще более крупные пространства имен.

Лекция 11.

Множественное наследование и коллизия имен

При множественном наследовании рассматриваются две основные проблемы:

  1. Коллизия имен

  2. Наследование от общего предка

Проблема коллизии возникает если два или более интерфейса имеют методы с одинаковыми именами или сигнатурами. Если имена совпадают, но сигнатуры различаются, то используется перегрузка. В случае если совпадают имена и сигнатуры этих методов, то выходом может быть:

  1. Склеивание – используется в случае если класс, наследуемый от двух или более интерфейсов, считает, что разные интерфейсы задают один и тот же метод, для которого должна быть обеспечена единая реализация наследником. Наследник строит единственную реализацию метода, соответствующую всем наследуемым интерфейсам.

  2. Переименование – несмотря на то, что сигнатуры методов в интерфейсах одинаковы, эти методы должны быть реализованы по-разному. В этой ситуации необходимо переименовать конфликтующие методы:

    1. Переименование методов в самих интерфейсах – неправильный путь, так как способ реализации наследника и условия реализации наследника не должны требовать изменения родителей, изменяться должен только наследник.

    2. Переименование метода интерфейса в самом классе наследника – для этого реализуются методы различных интерфейсов как закрытые, а затем открываются с переименованием. Пример : public interface IProps { void Prop1(string s); void Prop2(string name, int val); void Prop3(); } public interface IPropsOne { void Prop1(string s); void Prop2(int val); void Prop3(); } public class ClainTwo:IProps, IPropsOne { public void Prop1(string s) { Console.WriteLine(s); } public void Prop2(string s, int val) { Console.WriteLine(s+” ”+x); } public void Prop2(int x) { Console.WriteLine(x); } void IProps.Prop3() { Console.WriteLine(“Свойство 3 интерфейса 1”); } void IPropsOne.Prop3() { Console.WriteLine(“Свойство 3 интерфейса 2”); } public void Prop3From1() { ((IProps)this).Prop3(); } public void Prop3From2() { ((IPropsOne)this).Prop3() } }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]