C# action,delegate,func的用法和区别
1.WPF笔记2.WPF将DataGrid中的数据保存到CSV中3.C# 单例使用4.Nlog笔记5.串口学习笔记6.C# 控件设置只可输入数字7.C# 运算符 ?、??、?: 、?. 、各种问号的用法和说明8.Redis笔记9.WinForm实现Loading等待界面10.C# Socket网络编程11.C#正则表达式12.BackgroundWorker控件使用记录13.INotifyPropertyChanged14.泛型类和泛型方法
15.C# action,delegate,func的用法和区别
16.单值转换器17.日志工具18.SqlSugar操作Sqlite数据库19.Winform中创建导航窗口:WizardFramework使用举个委托的例子:
小明去书店买一本书。
1、 买书:
private delegate void BuyBook();
2、附近书店 (委托的方法):
public static void Book()
{
MessageBox.Show("提供书籍");
}
3、小明和书店建立关系(给委托绑定方法)
BuyBook buybook = new BuyBook(Book);
4、小明给钱拿走书:
buybook();
结果:
Action的用法
那有没有一种方法不去定义委托呢?
Action<T1,T2,T3>:参数都为封装的参数,无返回值。
Action BookAction = Book;
BookAction();
结果:
小明现在想买其他书,那么只需要把参数传过去就可以了:
public static void Book(string BookName)
{
MessageBox.Show($"买一本{BookName}");
}
private void button1_Click(object sender, EventArgs e)
{
Action<string> BookAction = Book;
BookAction("《三国演义》");
}
结果:
然后小明现在想去其他家书店买,那么就要用到Action<T1,T2>:
public static void Book(string BookName, string BookStore)
{
MessageBox.Show($"在{BookStore}里买一本{BookName}");
}
private void button1_Click(object sender, EventArgs e)
{
Action<string, string> BookAction = Book;
BookAction( "《三国演义》","新华书店");
}
结果:
Func用法
小明觉得买书要到书店买太麻烦,能不能网购寄到我家呢?这时可用到Func。
Func<T1,T2,T3>:最后一个参数(T3)表示返回值类型,前面的(T1,T2)都是形参类型。
(无参数有返回值)
public static string SendBook()
{
return "买的书送到家里了";
}
private void button1_Click(object sender, EventArgs e)
{
Func<string> sendBook = SendBook;
MessageBox.Show(sendBook());
}
结果:
接着小明想网购一本《三国演义》(有参数有返回值):
public static string SendBook(string BookName)
{
var str = $"买的书{BookName}送到家里了";
return str;
}
private void button1_Click(object sender, EventArgs e)
{
Func<string, string> sendBook = SendBook;
MessageBox.Show(sendBook("《三国演义》"));
}
结果:
总结:
- Action用于无返回值的函数(参数个数可根据需要传入)
- Func用于有返回值的函数(参数个数可根据需要传入)
本文作者:时而有风
本文链接:https://www.cnblogs.com/shieryoufeng/p/17861822.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步