委托的一个完整范例范例

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();
            }
        }
    }
}
posted @ 2011-08-11 15:01  @vip_c  阅读(182)  评论(0编辑  收藏  举报