string(Book); BookAction("百年孤独"

时间:2021-12-19 02:04:50

以前我都是通过界说一个delegate来写委托的,但是比来看一些外国人写的源码都是用action和func方法来写,其时觉得对这很陌生所以看发源码也感受陌生,所以我就花费时间来学习下这两种方法,然后发明确实代码简洁了不少。这两种方法我们也可以去实践的过程去慢慢运用。

先说一下委托:

模拟一下场景:小明比来学习情绪飞腾,以前买的书已经满足不了欲望,筹算去买本(一个措施员的自我修养)。可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去相近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托。开始分析

1:小明要买一本一个措施员自我修养的册本(xx书就不买)硬性要求 (这就是要界说委托性质)

代码:

private delegate void BuyBook();

2:相近书店 (委托的要领)

代码:

public static void Book()
{
Console.WriteLine("我是供给册本的");
}

3:小明和书店成立关系(给委托绑定要领)

代码:

BuyBook buybook = new BuyBook(Book);

4:小明给钱拿书(触发)

buybook();

上面的内容是为了能理解委托的用法下面呢我开始讲解Action和Func

Action的用法

1:小明很是苦恼,我就是买一本册本,每次都让我界说下,烦死了,有没有一种要领不去界说委托呢,那么有吗,还真有,就是我们今天讲的Action

Action BookAction = new Action(Book);
BookAction();
这样是不是就简单了很多

2:小明此刻又不对劲了,我把一个措施员的自我修养看完了,此刻呢想买本其他书,那怎么办,我是不是要从头再次界说委托。其实不需要你只需要把参数穿过来就可以了。下面我们看Action<T>的用法
static void Main(string[] args)
{
Action<string> BookAction = new Action<string>(Book);
BookAction("百年孤傲");
}
public static void Book(string BookName)
{
Console.WriteLine("我是买书的是:{0}",BookName);
}
3:此刻小明又转变主意了,我不只要本身选择册本,我还要在一个牛逼的册本厂家买,有没有这种方法呢,那么报告你有,Action<in T1,in T2>static void Main(string[] args)
{
Action<string,string> BookAction = new Action<string,string>(Book);
BookAction("百年孤傲","北京大书店");
}
public static void Book(string BookName,string ChangJia)
{
Console.WriteLine("我是买书的是:{0}来自{1}",BookName,ChangJia);
}
Func的用法

小明又产生疑问了,每次我本身都去书店去拿书,,有没有一种要领直接送到我家里呢,那么Func专门供给了这样的处事

Func 解释 封装一个不定具有参数(也许没有)但却返回 TResult 参数指定的类型值的要领。

1:我们先看一个没有参数只有返回值的要领
static void Main(string[] args)
{
Func<string> RetBook = new Func<string>(FuncBook);
Console.WriteLine(RetBook);
}
public static string FuncBook()
{
return "送书来了";
}
2:有参数有返回值的要领
static void Main(string[] args)
{
Func<string,string> RetBook = new Func<string,string>(FuncBook);
Console.WriteLine(RetBook("aaa"));
}
public static string FuncBook(string BookName)
{
return BookName;
}
3:Func一个很重要的用处就是通报值,下面我举一个简单的代码来说明

Func<string> funcValue = delegate
{
return "我是即将通报的值3";
};
DisPlayValue(funcValue);
注释1:DisplayVaue是措置惩罚惩罚传来的值,比方缓存的措置惩罚惩罚,或者统一添加数据库等

private static void DisPlayValue(Func<string> func)
{
string RetFunc = func();
Console.WriteLine("我在测试一下传过来值:{0}",RetFunc);
}
总结

1:Action用于没有返回值的要领(参数可以按照本身情况进行通报)

2:Func恰恰相反用于有返回值的要领(同样参数按照本身情况情况)

3:记住无返回就用action,有返回就用Func

标签:

原文地点:https://www.cnblogs.com/w-pound/p/8846814.html