すべてのFuncデリゲートが値を返します。 voidを返すメソッドで使用できる.NETデリゲートは何ですか?戻り型のないFuncデリゲート
答えて
すべてのFuncデリゲートが何かを返す。すべてのActionデリゲートはvoidを返します。
Func<TResult>
は引数を取らず、TResultを返します。
public delegate TResult Func<TResult>()
Action<T>
1つの引数を取り、値を返しません:
public delegate void Action<T>(T obj)
Action
は、最も単純な、 '裸' デリゲートです
public delegate void Action()
もありますおよびAction<TArg1, TArg2>
(および16個までの引数)。これらのすべて(Action<T>
を除く)は、.NET 3.5(System.Coreで定義されています)の新機能です。
System.Func<T>
とSystem.Action
でも、私は0引数やその他もろもろは.NET 2.0には存在しないと思います。 – Brian
それは不思議です:Fredは.Net 2.0にはまったく存在しませんが、PredicateとActionはそうです。 –
.NET 2.0ではMethodInvokerデリゲートを使用します。 –
をお試しください...は引数を取りませんし、ボイド戻り値の型を持っていますか?
私はAction
がこれに対する解決策であると確信しています。
のFuncデリゲートのすべてが真実ではない少なくとも一つのパラメータ
を取ります。それらはすべて少なくとも1つの型引数をとりますが、その引数は戻り値の型を決定します。
したがって、Func<T>
はパラメータを受け入れずに値を返します。値を返さない場合は、Action
またはAction<T>
を使用します。
時折、あなたは暗黙的にEventArgs
から派生する必要があり二番目のパラメータに加えて、タイプobject
の引数を受け入れSystem.EvenHandler<T>
を利用することができ、その場合、イベント処理のためのデリゲートを、書くことになるでしょう。 EventHandlerが返すvoid
私は個人的には、機能の本体で一回限りのコールバックを作成するためのテストの際に便利です。
非常に簡単な方法で戻り値と戻り値のないサブルーチンを呼び出すことができます。 Funcおよびアクションをそれぞれ使用しています。 (もhttps://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx参照)
using System;
public class Program
{
private Func<string,string> FunctionPTR = null;
private Func<string,string, string> FunctionPTR1 = null;
private Action<object> ProcedurePTR = null;
private string Display(string message)
{
Console.WriteLine(message);
return null;
}
private string Display(string message1,string message2)
{
Console.WriteLine(message1);
Console.WriteLine(message2);
return null;
}
public void ObjectProcess(object param)
{
if (param == null)
{
throw new ArgumentNullException("Parameter is null or missing");
}
else
{
Console.WriteLine("Object is valid");
}
}
public void Main(string[] args)
{
FunctionPTR = Display;
FunctionPTR1= Display;
ProcedurePTR = ObjectProcess;
FunctionPTR("Welcome to function pointer sample.");
FunctionPTR1("Welcome","This is function pointer sample");
ProcedurePTR(new object());
}
}
このコードスニペットをお寄せいただき、ありがとうございます。 *なぜ*これが問題の良い解決策であるかを示すことによって[適切な説明は長期的価値を大幅に改善する](// meta.stackexchange.com/q/114762/350567)、将来的にはより有用になる他の同様の質問の読者。あなたの前提を含め、あなたの答えを[編集]して説明を加えてください。 – iBug
この例でこれを試してみてください...は引数を取りませんし、ボイド戻り値の型を持っていますか?
あなたがSystem.Windows.Forms
のために書いている場合、あなたはまた、使用することができます。
public delegate void MethodInvoker()
- 1. 異なる戻り値の型を持つ列挙型Func
- 2. モノタッチ 'Func'デリゲート?
- 3. Funcデリゲートのよりよい(一般的な)宣言
- 4. Funcデリゲートのリスト(ラムダ式)
- 5. C#のFuncデリゲートだからスレッド例外
- 6. ライブラリ内のC#Func <>デリゲート
- 7. タスク<T>とFuncデリゲートのタスク
- 8. アクション/ Funcデリゲートの名前を取得
- 9. を連結2つのFuncデリゲート
- 10. デリゲートに代入するときの戻り値とシグネチャの難易度 - Func <Task>対アクション
- 11. IEnumerable <T>をデリゲートの戻り値の型として使用する
- 12. Java - ジェネリック型の戻り型
- 13. Func <>とデリゲートとラムダ式の違い
- 14. 戻り型()
- 15. Mapstruct戻り型
- 16. decltype(オート) - 戻り値の型の推論戻り値の型
- 17. 戻り値の型
- 18. 戻り値の型
- 19. 戻り値の型=
- 20. 戻り値の型
- 21. golangの返り値で関数funcで空の戻り値
- 22. VS2015 C++コルーチン:promise.get_return_object()戻り値の型とコルーチン戻り値の型
- 23. 私のデリゲート型が
- 24. リストソートとデリゲート&ラムダ式についてFunc stuff
- 25. JRebel:ERROR javax.servlet.ServletException:java.lang.VerifyError:不正な戻り値の型
- 26. は異なる戻り値の型
- 27. ラムダ式の悪質な戻り型
- 28. C++バリデーションテンプレート戻り型
- 29. 戻り値型インターフェイス
- 30. C#のインターフェースの戻り値の型タイプ(ない間違い)
FYI、次のバージョンの基本クラスライブラリには、4つ以上の仮パラメータをサポートするFuncおよびAction型が含まれます。彼らがどれほど大きなものになるのか正確には思い出せません。 –
私はそれを聞いていない、エリックの頭のおかげで感謝! –
.NET 4.0では、最大8つのパラメータが追加されました。もし彼らがこれを保持すれば、次のバージョンでは11まで上がります!! 11! –