Может ли кто-нибудь разместить четкие примеры для использования событий в С# (или любого языка .NET)? Их много в Интернете, но большинство из них сложны, и они не распространяются на каждую ситуацию. Сделайте это универсальным , если возможно, пожалуйста.
События являются основой событийное программирование (очевидно). Таким образом, событие подходит в любое время, когда вы хотите предпринять действия (действия) на основе чего-то еще. Что-то еще может быть множеством вещей - пользователь, нажимая кнопку, таймер, закрывающийся окно и т.д. Это трудно сделать его действительно универсальным, так как существует так много разных сценариев.
Одним из примеров может быть заполнение метки текстом, когда пользователь нажимает кнопку:
btnMyButton.Click += (o, ev) => { SetTextLabel(label1, "You clicked the button"); };
Обратите внимание, что SetTextLabel - это функция, которую вы бы предоставили, и это должен быть ThreadSafe (иначе меня бы раздражали комментаторы, говорящие, что мой код не был таким).
object o
или System.EventHandler ev
но вы, безусловно, можете использовать их.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class EXMAPLE
{
public event EventHandler Changed;
protected string _content;
public string Content{
get { return _content; }
set
{
_content = value;
OnChanged(EventArgs.Empty);
}
}
// Invoke the Changed event; called whenever list changes:
protected virtual void OnChanged(EventArgs e)
{
if (Changed != null)
Changed(this, e);
}
}
class Program
{
private static void EXAMPLE_CONTENT_CHANGED(object sender, EventArgs e)
{
EXMAPLE ex = (EXMAPLE)sender;
Console.WriteLine(ex.Content);
}
private static void INNA_REAKCJA(object sender, EventArgs e)
{
Console.WriteLine("The Content of EXAMPLE was changed");
}
static void Main(string[] args)
{
EXMAPLE ex1 = new EXMAPLE();
EXMAPLE ex2 = new EXMAPLE();
//add event ;->
ex1.Changed += new EventHandler(EXAMPLE_CONTENT_CHANGED);
ex2.Changed += new EventHandler(EXAMPLE_CONTENT_CHANGED);
ex2.Changed += new EventHandler(INNA_REAKCJA);
//test
ex1.Content = "value 1";
ex2.Content = "value 2";
System.Console.ReadKey();
}
}
}
Это простой пример - не универсальный, p
Самый простой пример - когда вы создаете форму, содержащую интерактивный элемент управления, такой как кнопка. Когда вы дважды щелкаете по кнопке, Visual Studio будет генерировать событие в коде, указывающем на метод, который будет вызываться, когда событие будет запущено.
this.MyButton.Click += new System.EventHandler(this.MyButton_Click);
В общем случае события - это в основном сообщения, отправленные объектом для уведомления других объектов о том, что действие произошло.
this.MyButton.Click
является объектом EventHandler?
Из вашего поста, кажется, что вы хотите "пример", который "применим к каждой ситуации", будучи "универсальным" и "практичным". Я не понимаю, как это возможно.
Если вы просто хотите лучше понять события, запустите здесь. Вы можете найти что-то более короткое, но оно может быть неясным.
События - это текущий способ взаимодействия с пользовательским интерфейсом с остальной частью приложения. Будущее Microsoft в развитии событий зависит от будущего этой новой технологии, называемой RX Extensions, хотя (кажется, очень многообещающей). Java имеет компонент Actionlistener (исходящий из шаблона наблюдателя), если вы его знаете и можете оценить удобство использования событий (в пользовательском интерфейсе). События в целом - это механизм, с помощью которого уведомления передаются объекту-референту, когда что-то происходит.
Также проверьте соответствующий учебник из msdn.
Пример:
List.Changed -= new ChangedEventHandler(ListChanged);
Здесь разработчик подключил метод, который будет вызываться с ростом события Changed в контейнере List. Таким образом, когда список будет изменен (добавлен или удален элемент), этот метод будет вызван.