zoukankan      html  css  js  c++  java
  • 委托的一个完整范例范例

    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();
                }
            }
        }
    }
  • 相关阅读:
    几个比较好的IT站和开发库官网
    Win7下Qt5.2中使用OpenGL的glu函数库无法使用的解决方案
    QT5.2 Assistant-设置应用程序图标
    linux下文件编码格式转换方法(gb18030/utf-8)
    QT-进制转换计算器
    QT-图标设置
    QT-make: *** No rule to make target
    QT的exe文件打开显示,无法定位程序***输入点于动态链接库****
    QT工程文件上传Github仓库
    Eclipse中文乱码
  • 原文地址:https://www.cnblogs.com/mylife_001/p/2135005.html
Copyright © 2011-2022 走看看