以前はデリゲートを定義してデリゲートを書いていましたが、最近外国人が書いたソースコードがactionとfuncの形で書かれているのを見て、時間をかけてこの2つの方法を学んでみると、確かにコードははるかに簡単であることがわかりました。 。これら 2 つの方法は、練習の過程でゆっくりと使用することもできます。
まずコミッションについて話させてください。
シーンをシミュレーションしてみましょう。Xiao Ming は最近学習意欲が高く、以前に購入した本では欲求を満たせないため、本を購入する予定です (プログラマーの自己修養)。でも昔はいつも本の工場に買いに行ってたんだけど、あまり遠くまで持っていけないから近くの本屋に買いに行って、シャオミンがお金を渡しに行って本を返してもらったんです、これ処理は委託されます。分析を開始する
1: Xiaoming はプログラマーの自己啓発に関する本を購入したいと考えています (xx 本は購入されません) 必須要件 (これは委託の性質を定義するものです)
コード:
プライベートデリゲート void BuyBook();
2:お近くの書店(お任せ方法)
コード:
public static void Book()
{ Console.WriteLine("私は本を提供します"); }
3:Xiaomingが書店と関係を築く(委託への拘束方法)
コード:
BuyBook buybook = 新しい BuyBook(Book);
4:シャオミンが本を買うためにお金を渡す(トリガー)
本を買う();
ここまではデリゲートの使い方を理解する内容でしたが、次にActionとFuncについて説明していきます。
アクションの使用法
1: シャオミンはとても悩んでいます。本を買ったばかりなのに、毎回それを定義するように頼まれました。とてもイライラしています。委託を定義しない方法はありますか?方法はありますか?それは本当にあります。それはアクションです今日のことを話しました。
Action BookAction = new Action(Book);
BookAction();
これはもっと簡単ですか?
2: Xiao Ming は今不満です。「プログラマーの自己修養」を読み終えましたが、別の本を購入したいのですが、どうすればよいですか? コミッションをもう一度再定義しますか? 実際、パラメータを渡すだけでよいわけではありません。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: 今、シャオミンはまた考えを変えました。自分で本を選ぶだけでなく、素晴らしい書籍メーカーから購入したいのです。そのような方法はありますか? 教えてください、アクション<in T1 、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);
}
関数の使用法
Xiao Ming さんにまた質問があります。いつも本屋に本を取りに行くのですが、家に直接届ける方法はありますか? そこで、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: DisplayVauue は受信した値を処理するもので、キャッシュ処理やデータベースの均一追加などのメタファーです。
private static void DisPlayValue(Func<string> func)
{
string RetFunc = func();
Console.WriteLine("我在测试一下传过来值:{0}",RetFunc);
}
要約する
1: 戻り値のないメソッドにアクションを使用します(状況に応じてパラメータを渡すことができます)
2: Func は戻り値を持つメソッドの場合はその逆です (同じパラメータは独自の状況に基づいています)
3: リターンがない場合は action を使用し、リターンがある場合は Func を使用することを忘れないでください。