委托与事件

 


1.委托

定义一个委托:  delegate void Show();

委托的执行

      委托名.invoke() 

     委托名();

    委托名。beginInvoke() // 开启一个新的线程 Core 里面不支持

2.C# 自带委托 Func 和 action  

Func<string, string> func = (a) => { return a; };  //有返回值的,先参数,最后一位返回值
string n= func.Invoke("aaaaaaaaaa");
 Action<DateTime> time = (ti) => { Console.WriteLine(ti.ToString()); };//无返回值
            time.Invoke(DateTime.Now);

3.事件

  public event Action<string> Show;  标准定义格式

下面是一个简单的事件订阅模式应用

复制代码
public class Animal
    {
        private string name;
       public event EventHandler<EventArgs> NameChange;  //定义事件
            
        /// <summary>
        /// 发布者
        /// </summary>
        public string Name { get => name; set{
                if (name != value)
                {
                    AnimalEventArgs animalEventArgs = new AnimalEventArgs();
                    animalEventArgs.oldValue = name;
                    animalEventArgs.newValue = value;
                    NameChange(this, animalEventArgs);
                }
                name = value; } 
        }
      
        public void Show()
        {
            Console.WriteLine("这个Animal 内部方法");
       }
    }
  /// <summary>
        /// 事件参数
        /// </summary>
public class AnimalEventArgs : EventArgs { public string oldValue { get; set; } public string newValue { get; set; } }

/// <summary> /// 要订阅者,要做相应的变化 /// </summary>
public class master {
public void NameChange(object? sender, EventArgs e)
{ Console.WriteLine($
"宠物主人呼叫{((AnimalEventArgs)e).newValue}");//当宠物改名了,大家就叫新的名字 }
}
复制代码
  static void Main(string[] args)
        {          
            Animal animal=new Animal();
            animal.NameChange += new master().NameChange;//订阅绑定事件
            animal.Name = "贝贝";
            animal.Name = "金毛";
        }

  输出结果:

      宠物主人呼叫贝贝
      宠物主人呼叫金毛

4.委托和事件的区别

事件更安全,只能在定义的类里面invoke() ,即使是子类也不可以

 

posted @   乌柒柒  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示