①、什么是委托?
C#中的委托(Delegate)类似于C或C++中的函数指针。委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时改变。委托声明决定了可由该委托引用的方法,委托可指向一个与其具有相同标签的方法。
一旦声明了委托类型,委托对象必须使用new关键字来创建,且与一个特定的方法有关。当创建委托时,传递到new语句的参数就像方法调用一样书写,但是不带有参数。
(通俗讲就是委托别人去做,本来应该自己去做的事情,即将做事的方法委托)
②、什么是委托的多播?
委托对象可使用"+"运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。“-”运算符可用于从合并的委托中移除组件委托。
使用委托的这个有用的特点,您可以穿件一个委托被盗用的方法的调用列表。这被称为委托的多播,也叫组播。
(通俗讲就是,委托别人做事,别人做完一件事后,又让别人接着做其他事情,即多个做事方法的委托)
③、什么时候用委托?
个人现阶段认为:想要将方法作为参数使用的时候。
④、为什么用委托,给我们带来哪些方便?
通过此次的机房重构,很直观的一个作用就是减少了冗余代码。
⑤、设计模式中哪个模式用到了委托?
观察者模式
⑥、委托与事件的区别?
委托中没有通知的成分,个人感觉更像数据库中的触发器;而事件则是在发生其他类或对象关注的事情时,类或对象可通过事件通知。
⑦、代码展示如何使用委托:
我们平常书写的委托形式:
//定义一个委托相当于定义一个新类,所以可以定义类的地方都可以定义委托。
//委托:函数作为参数,可以调用多个方法。
public delegate void MyDelegate(string str); //声明无参委托
public delegate int MyDelegate2(string str, int age); //声明有参委托
class Program
{
static void Main(string[] args)
{
//无返回值的委托
MyDelegate dele = new MyDelegate(WriteName); //实例化一个委托实例,传入的参数为方法
dele += GetAge; //通过+=增加委托实例对象,即委托可以调用多个方法
dele("WriteName"); //执行委托,并赋值
//有返回值的委托
MyDelegate2 dele2 = new MyDelegate2(GetPerson);
int age = dele2("路飞", 18);
Console.WriteLine(age);
Console.ReadKey();
}
static void WriteName(string name)
{
Console.WriteLine(name);
}
static void GetAge(string age)
{
Console.WriteLine(age);
}
static int GetPerson(string name,int age)
{
return age;
}
}
然而在C#中,系统为我们已经封装了两个委托,Action,Func
那用法如何呢,方法的内容不变,我们展示一下main函数中的区别?
class Program
{
static void Main(string[] args)
{
//系统自带Action委托
Action<string> action = new Action<string>(WriteName);
action("路飞");
//系统自带Func委托
Func<string, int, int> func = new Func<string, int, int>(GetPerson);
func("路飞", 18);
Console.WriteLine(age);
Console.ReadKey();
}
采用系统自带的委托,省去了我们每次重新定义委托的过程,代码更加精简。
以上是个人的初步学习,哪位大佬有更好的解说和示例,还望多多指导^_^