Created
October 9, 2025 13:01
-
-
Save sunmeat/415faab3edc0b0d38e66b33865274501 to your computer and use it in GitHub Desktop.
event args C#
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Події — це особливий тип багатонадресних делегатів, які можна викликати лише з класу | |
або структури, в якій вони оголошені (клас видавця). | |
Якщо на подію підписані інші класи або структури, | |
їхні методи обробники подій будуть викликані, коли клас видавець ініціює подію. | |
Події дозволяють класу або об'єкту повідомляти інші класи або об'єкти | |
про виникнення певних ситуацій. | |
Клас, що надсилає (або викликає) подію, називається видавцем, а класи, | |
що приймають (або обробляють) подію, називаються підписниками. | |
Події мають такі властивості: | |
- Видавець визначає момент виклику події, підписники визначають вжиті відповідні дії | |
- На подію може бути підписано кілька підписників | |
- Підписник може обробляти кілька подій від кількох видавців | |
- Події без підписників ніколи не виникають | |
- Зазвичай події використовуються для сповіщення про дії користувача, | |
таких як натискання кнопок або вибір меню та його пунктів у графічному інтерфейсі користувача | |
- У бібліотеці класів .NET основою подій є делегат EventHandler | |
та базовий клас EventArgs | |
*/ | |
using System.Text; | |
class Program | |
{ | |
public class Person | |
{ | |
// для створення події можна підготувати окремий кастомний тип делегата | |
public delegate void MyDelegateType(object sender, EventArgs e); | |
public event MyDelegateType? MyEvent; | |
// або використати стандартний делегат EventHandler | |
public event EventHandler? SimpleEvent; | |
// в тому числі з можливістю передачі додаткових даних в обробник події | |
public event EventHandler<CustomEventArgs>? CustomEvent; | |
public string? FirstName { get; set; } | |
public string? LastName { get; set; } | |
public DateTime? Birthday { get; set; } | |
public Person(string firstName, string lastName, DateTime birthday) | |
{ | |
FirstName = firstName; | |
LastName = lastName; | |
Birthday = birthday; | |
} | |
public void WorkCustomDelegateType() | |
{ | |
Thread.Sleep(1000); | |
MyEvent?.Invoke(this, EventArgs.Empty); | |
} | |
public void WorkEventHandler() | |
{ | |
Thread.Sleep(1000); | |
SimpleEvent?.Invoke(this, EventArgs.Empty); | |
} | |
public void WorkCustomEventArgs() | |
{ | |
Thread.Sleep(1000); | |
CustomEvent?.Invoke(this, new CustomEventArgs("Робота завершена з передачею рядка в обробник!")); | |
} | |
} | |
// кастомний клас-нащадок івентаргса для передачі додаткових даних в обробник події | |
public class CustomEventArgs : EventArgs | |
{ | |
public string Message { get; private set; } | |
public CustomEventArgs(string message) | |
{ | |
Message = message; | |
} | |
} | |
static void Main() | |
{ | |
Console.OutputEncoding = Encoding.UTF8; | |
var person = new Person("Олена", "Коваленко", new DateTime(1995, 5, 20)); | |
person.MyEvent += Handler1; | |
person.SimpleEvent += Handler2; | |
person.CustomEvent += Handler3; | |
person.WorkCustomDelegateType(); | |
person.WorkEventHandler(); | |
person.WorkCustomEventArgs(); | |
} | |
static void Handler1(object sender, EventArgs e) | |
{ | |
Console.WriteLine("Подія на користувацькому типові делегата!"); | |
} | |
static void Handler2(object sender, EventArgs e) | |
{ | |
Console.WriteLine("Подія на вбудованому типові делегата!"); | |
} | |
static void Handler3(object sender, CustomEventArgs e) | |
{ | |
Console.WriteLine($"Кастомне повідомлення: {e.Message}"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment