委托的一个完整范例范例

本文介绍 C# 中委托的基本概念与使用方法。通过一个具体的示例展示了如何声明和使用委托,以及如何将不同的方法注册到委托上。文章还演示了如何在一个类中定义委托变量,并在适当的时候调用这些委托。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
            }
        }
    }
}

转载于:https://www.cnblogs.com/mylife_001/archive/2011/08/11/2135005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值