日期:2014-05-18  浏览次数:20768 次

发现委托注册的两种方法,有区别没? 求大神解
C# code

   public delegate void TestDegegate();//定义委托
    class Program
    {
          public void Speak()
        {
            Console.WriteLine("Speak:Hello!");
        }
        static void Main(string[] args)
        {
            Program t = new Program();
            TestDegegate test1 = new TestDegegate(t.Speak);//注册一次,实例化注册
            test1 += new TestDegegate(t.Speak);//继续注册一次,实例化注册
           
            test1();//执行
            Console.ReadKey();
        }
    }



C# code

   public delegate void TestDegegate();//定义委托
    class Program
    {
          public void Speak()
        {
            Console.WriteLine("Speak:Hello!");
        }
        static void Main(string[] args)
        {
            Program t = new Program();
            TestDegegate test1 =t.Speak;//注册一次
            test1 +=t.Speak;//继续注册一次
           
            test1();//执行
            Console.ReadKey();
        }
    }



两次执行结果一样如下:(截图不知道怎么放上来,人工模拟结果)
Speak:Hello!
Speak:Hello!

请教各位大大,这两种注册方式有没有区别呀? 还是建议都用 new delegate 这种实例化的注册方法好些么? 因为看到的书上貌似都是说的这种 实例化委托 注册的方式 ,偶然间发现“不用实例化”(真实情况不知道是不是内部执行的时候自动实例化了)的写法


------解决方案--------------------
其实是编译器帮你new了而已。
------解决方案--------------------
C# code

public delegate void TestDegegate();//定义委托
    class Program
    {
          public void Speak()
        {
            Console.WriteLine("Speak:Hello!");
        }
        static void Main(string[] args)
        {
            Program t = new Program();
            TestDegegate test1 = new TestDegegate(t.Speak);//注册一次,实例化注册
            test1 += new TestDegegate(t.Speak);//继续注册一次,实例化注册
           
            test1();//执行
            Console.ReadKey();
        }
    }

------解决方案--------------------
其实没有啥子区别而已 不过前者你那么写 有利于以后代码阅读
------解决方案--------------------
后面那种写法是C#2.0引入的新特性——方法组转换(Method group conversion)
------解决方案--------------------
一样的,还可以匿名函数