什么是委托?
委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托特别用于实现事件和回调方法!
使用委托:
public delegate void MyDelegateDemo();
private void HelloWorld()
{
Console.WriteLine("Hello World");
}
public void Print()
{
MyDelegateDemo myDelegateDemo;
myDelegateDemo = HelloWorld;
myDelegateDemo();
}
首先我们可以看出我们使用委托时:
第一步定义一个委托类型
public delegate void MyDelegateDemo();
第二步实例化委托
MyDelegateDemo myDelegateDemo;
第三步定义一个跟委托类型相匹配的函数
private void HelloWorld()
{
Console.WriteLine("Hello World");
}
第四步将函数交给委托实列
myDelegateDemo = HelloWorld;
最后我们才能使用该委托!
说一说我对委托的理解:
比如你知道定义一个普通变量
int i;
这个变量i会在后续的方法中使用
比如说
private void PrintInt(int i)
{
Console.WriteLine(i);
}
我们后续需要输出不同的值的时候,改变一下变量即可!
那么我们定义一个委托变量
MyDelegateDemo myDelegateDemo;
和普通变量不同的是MyDelegateDemo类型是我们自己定义的类型而已。
使用
private void PrintDelagate(MyDelegateDemo myDelegateDemo)
{
myDelegateDemo();
}
其实和普通变量使用方法一样而已!
而区别在于
普通变量存放的是不同的变量
而委托变量存放的是不同的方法
通过这个例子我们看出
private void HelloWorld()
{
Console.WriteLine("Hello World");
}
public void Print()
{
PritfDocument(HelloWorld);
}
private void PritfDocument(MyDelegateDemo myDelegateDemo)
{
Console.WriteLine("来到了打印店");
Console.WriteLine("打印的内容是");
myDelegateDemo();
Console.WriteLine("离开了打印店");
}
可以看到输出内容是:
简化
我们在使用委托的时候定义起来是不是很麻烦,觉得很烦,微软也想到了这一点!
所以Action和Func就出来了,这两个有什么区别呢?
两者的区别在于Action没有返回值,而Func有返回值!
那么我们就可以简化一下PritfDocument方法
private void PritfDocument(Action myDelegateDemo)
{
Console.WriteLine("来到了打印店");
Console.WriteLine("打印的内容是");
myDelegateDemo();
Console.WriteLine("离开了打印店");
}
但是这样也很烦 我们还需要自己去定义一个方法呢!
所以我们使用匿名方法去掉这个步骤
PritfDocument(delegate () { Console.WriteLine("Hello World"); }
private void PritfDocument(Action myDelegateDemo)
{
Console.WriteLine("来到了打印店");
Console.WriteLine("打印的内容是");
myDelegateDemo();
Console.WriteLine("离开了打印店");
});
那使用匿名方法让代码看起来不是那么的简洁,我们还能不能优化呢?
c#作为世界上最好的语言但是也是可以的!
使用Lambda来简化,
最后变成了
PritfDocument(()=> Console.WriteLine("Hello World"));
private void PritfDocument(Action myDelegateDemo)
{
Console.WriteLine("来到了打印店");
Console.WriteLine("打印的内容是");
myDelegateDemo();
Console.WriteLine("离开了打印店");
}
最后大家如果喜欢我的文章,还麻烦给个关注, 希望net生态圈越来越好!