首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-09-09 
发现委托注册的两种方法,有区别没? 求大神解C# codepublic delegate void TestDegegate()//定义委托class

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

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)
[解决办法]
一样的,还可以匿名函数

热点排行