[解決済み] Func<string,string>とdelegateの違いは何ですか?
2023-03-04 01:31:42
質問
デリゲートには2つの形態がありますね。
A. Func<string, string> convertMethod = lambda
B. public delegate string convertMethod(string value);
この2つの違いが実際に何なのか不明です。どちらもデリゲートなのでしょうか?最初のものはラムダを使用し、2番目のものは実際に仕事を実行するメソッドを持つ必要があると思います。私も混乱しているかもしれません。
どのように解決するのですか?
まず第一に、あなたの2つの例は2つの全く別のことを行っています。 1 つ目は汎用的なデリゲート変数を宣言してそれに値を代入しており、2 つ目は単に
delegate
型を定義しています。 あなたの例は、より完全に、次のようになります。
public static class Program
{
// you can define your own delegate for a nice meaningful name, but the
// generic delegates (Func, Action, Predicate) are all defined already
public delegate string ConvertedMethod(string value);
public static void Main()
{
// both work fine for taking methods, lambdas, etc.
Func<string, string> convertedMethod = s => s + ", Hello!";
ConvertedMethod convertedMethod2 = s => s + ", Hello!";
}
}
しかし、もっと重要なことは、両方の
Func<string,string>
と
delegate string convertMethod(string)
は、メソッド、匿名メソッド、ラムダ式のいずれであっても、同じメソッド定義を保持することができるようになります。
どちらを使うべきかということについては、状況によります。 もし、デリゲートが何を受け取り、何を返すかによってより定義されることを望むなら、ジェネリックデリゲートが最適です。 もし、デリゲートに何か特別な名前をつけて、そのデリゲートが何をすべきなのかをより明確にしたいのであれば(単純な
Action
,
Predicate
など)であれば、独自のデリゲートを作成することは常に選択肢の一つです。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] クロージャ」と「ラムダ」の違いは何ですか?
-
[解決済み】|と||や演算子の違いは何ですか?
-
[解決済み】Invoke()とBeginInvoke()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み] delegateキーワードとlambda記法の比較