c#委托语法

在c#中可以使用委托来实现一些接口的功能,委托也是可以实例化的,实例化委托的参数就是委托对应的方法,然后将该实例赋值给委托变量,执行该委托变量来调用委托中的方法,请看如下代码:

static class Program
   {

       delegate void TestDelegate(string msg);
       [STAThread]
       static void Main()
       {
           TestDelegate td = new TestDelegate(TestDelegateMthod);
           td("hello");      

}
private static void TestDelegateMthod(string msg)
{ Console.WriteLine(msg + "!"); }

   }

需要注意的是,委托相关的操作符有三个:=,+=,-+,=的含义是将=右边的委托实例赋值给=左边的委托变量,如果该变量已经包含了委托实例,则以前的委托实例将被新的实例所取代,+=的含义是将+=右边的委托实例添加到+=左边的委托变量中,委托变量可以保存多个委托实例,如果该变量已经保存有委托实例了,则会把新的委托实例添加到委托变量中,-+的含义是从-+左边的委托变量中移除右边的委托实例

在实例化委托时可以不使用new关键字,请看如下代码:

TestDelegate td = TestDelegateMthod;

当编译的时候编译器会自动添加new关键字,将TestDelegateMthod替换为new TestDelegate(TestDelegateMthod)。

在2.0以后的版本中可以使用匿名方法,所以我们在实例化委托时可以不定义对应方法,而直接指定执行代码块,请看代码:

TestDelegate td = delegate(string msg)
            {
                Console.WriteLine(msg);
            };

在2.0以后的版本中可以使用泛型,在委托中我们同样可以使用泛型,请看代码:

static class Program
    {

        delegate void TestDelegate<t>(t msg);
        [STAThread]
        static void Main()
        {
            TestDelegate<string> td1 = TestDelegateMthod;
            td1("hi");
        }
        private static void TestDelegateMthod(string msg)
        { Console.WriteLine(msg + "!"); }

   }

在以上代码中使用泛型来定义了要传入的参数类型,这样我们就可以在申明委托时再指定参数类型。由于在申明委托时已经指定具体的参数类型,所以我们在实例化委托时就可以使用具体的参数类型了,上面代码中的TestDelegateMthod方法使用的就是具体的参数类型,还可以如下写:

TestDelegate<string> td1 =TestDelegateMthod<string>;

private static void TestDelegateMthod<t>(t msg)
        {
            Console.WriteLine(msg.ToString());
        }

在这里实例化委托时指定了一个泛型方法。

理解了以上内容,再来看3.5中的Func<T, TResult>这类委托就容易理解了。

转载于:https://www.cnblogs.com/tendzzss/archive/2009/08/28/1848201.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值