• 委托的一个完整范例范例


    namespace DelegateSample
    {
     
        //1,委托实质上是一个类,它继承自System.MulticastDelegate 
     
        //2,我们可以在任何声明类的地方声明一个委托。 
     
         //3,声明委托使用delegate关键字  
     
        //4,注册到委托的方法的签名必须跟委托一致,这就是为什么说c#中的委托是类型安全的。 
     
        //(这里的签名包括返回值和参数类型及参数个数。) 
     
        public delegate void Log(string message);//声明委托
     
        class UserService
        {
            public Log LogDelegate { get; set; }//前面定义的Log类型的委托的变量。
     
            public UserService() { }
     
            public void Register(User user)
            {
                if (user.Name == "Kirin")
                { 
     
                   //像调用方法那样让委托执行。
                    LogDelegate("注册失败,已经包含名为" + user.Name + "的用户");
                }
                else
                {
                    LogDelegate("注册成功!");
                }
            }
        }
     
        class Program
        {
            static void Main(string[] args)
            {
                User user = new User { Name = "Kirin", Password = "123" };
                UserService service = new UserService();
     
                //把静态方法LogToConsole注册到委托。 
                service.LogDelegate = LogToConsole;
     
                Program p = new Program();
     
                //把实例方法LogToTextFile注册到委托。
                //委托可以保持多个对象的引用(这里是多个方法)。 
                service.LogDelegate += p.LogToTextFile;
     
                //在这个方法内将会调用Log委托的实例LogDelegate 
                service.Register(user);
                Console.ReadLine();
            }
     
            static void LogToConsole(string message)
            {
                Console.WriteLine(message);
            }
     
            void LogToTextFile(string message)
            {
                using (StreamWriter sw = File.AppendText("log.txt"))
                {
                    sw.WriteLine(message);
                    sw.Flush();
                    sw.Close();
                }
            }
        }
    }
  • 相关阅读:
    Android平台下基于XMPP的IM研究
    Android File数据存储
    Android 获取屏幕分辨率的方式
    Android TabHost 动态修改图标或者动态改变标题
    Android DatePickerDialog用法
    SharedPreference Demo
    progressdialog 去边框
    [LCT学习时的一些笔记]
    [ZJOI2007]最大半连通子图
    【Matrixtree Theorem学习笔记】
  • 原文地址:https://www.cnblogs.com/mylife_001/p/2135005.html
Copyright © 2020-2023  润新知