同様の質問がいくつかありますが、私の質問とはまったく異なります。
戻り値(つまりvoid)とパラメーターのない関数に対応するFuncはありますか?
関連する質問は Funcは何も返さない? ですが、これはvoid型に対しては答えません。
(ビューモデルからビューへのアクションを要求するために必要です)。
あなたの言葉遣いは混乱しています。おそらく、「a戻り値の型があり、パラメーターがない関数」を意味します。単純に System.Action があります。
Action action = () => Console.WriteLine("hello world");
action();
あなたのコメントから:
ただし、
<T>
アクションを入力し、voidを使用することはできません(質問を編集しますが、間違えました)。
これは誤解を示しています。アクションデリゲートのTはinputです。 voidは出力です。Actionデリゲートは、本質的にvoidを返すデリゲートです。 Tは、inputのタイプであり、引数で指定するパラメーターです。
とにかく、この回答や他の回答が示すように、入力なしのデリゲートであるTなしのアクションデリゲートを使用できます。
はい、異なる数の入力パラメーターを取り、Action
戻り型を持つvoid
の異なるオーバーロードがあります。
Action public delegate void Action()
Action<T> public delegate void Action<T>(T obj)
Action<T1,T2> public delegate void Action<T1,T2>(T1 arg1, T2 arg2)
Action<T1,T2,T3> public delegate void Action<T1,T2,T3>(T1 arg1, T2 arg2, T3 arg3)
...
最初の行は探しているものです。
新しいフレームワークバージョンでは、さらに多くの引数を持つオーバーロードが追加されています。引数の最大数:
アクションには常にvoid
戻り型があります。 void
戻り値の型は不要であり、ジェネリック型パラメーターとして指定することはできません。対照的に、Func
デリゲートは「実際の」戻り値の型を定義し、戻り値の型に対して常に少なくとも1つのジェネリック型パラメーターを持ちます。
Func<TResult> public delegate TResult Func<TResult>()
Func<T,TResult> public delegate TResult Func<T,TResult>(T arg)
Func<T1,T2,TResult> public delegate TResult Func<T1,T2,TResult>(T1 arg1, T2 arg2)
...
.NET Framework 4.0は、in
およびout
修飾子を、反分散と共分散のジェネリック型パラメーターに追加しました。参照: Genericsの共分散および共分散 。例:
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2)
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)
あなたが探しているのはアクションです。パラメーターは使用せず、値も返しません。