定义事件

定义简单事件

定义事件前必须先定义用于该事件的委托类型

public delegate void simDelegate(string Name);

定义了委托后,就可以把事件本身定义为一个类成员

public class SimpleEve
{
    public event simDelegate simEve;

订阅方法,前提是方法的参数必须与事件的委托类型的参数相一致

simEve += simpleTest.Texts;
simEve += simpleTest.Text2;

引发事件,必须在该类中引发,在外部只能订阅,引发时要注意是否有参数

simEve(name);

整体代码:

复制代码
public delegate void simDelegate(string Name);
public class SimpleEve
{
    public event simDelegate simEve;
    private string name;
    public SimpleEve(string newName)
        => this.name = newName;
    public void Start()=> simEve(name);//引发事件
       
}
public class SimpleTest
{
    public void Texts(string name)
        => Console.WriteLine($"6666{name}");
    public void Text2(string name)
        => Console.WriteLine($"{name}6666");

}
复制代码
复制代码
static void Main(string[] args)
{
    SimpleEve simpleEve = new SimpleEve("TT");
    SimpleTest simpleTest = new SimpleTest();
    simpleEve.simEve += simpleTest.Texts;
    simpleEve.simEve += simpleTest.Text2;
    simpleEve.Start();
    Console.ReadKey();
}
复制代码

多用途事件

复制代码
class DelegateTest
{
    public event EventHandler eventTest;  //创建多用途事件
    private EventArgsTest eventArgsTest; 
    public DelegateTest()
    {
        eventArgsTest = new EventArgsTest("TT");
        eventTest += new EventHandler(StrTest.Run);
    }
    public void Start()
        => eventTest(this, eventArgsTest); //引发事件
}
class StrTest
{public static void Run(object source, EventArgs e)  //委托参数
    {
        string test = $"asfsfagsg sa {((EventArgsTest)e).Message} sad "; //多态性
        Console.Write(test);
    }
}
复制代码
class EventArgsTest:EventArgs
{
    private string message;
    public string Message { get => message; }
    public EventArgsTest() => message = "no message";
    public EventArgsTest(string newMessage)
        => message = newMessage;
}
DelegateTest delegateTest = new DelegateTest();
delegateTest.Start();

多用途事件有两个参数:

object source ------ 引发事件的对象的引用

ElapsedEventArgs e ------- 由事件传送的参数

source是指定生成事件的对象

EventArgs为参数

 

posted @   邢韬  阅读(265)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示