MSDNによれば、簡単な構成が望ましい場合は代理人の使用をお勧めします。 誰かが例を挙げて説明することができます簡単な構成は?Cで簡単な構成は何ですか
答えて
例が役立ちます。
いくつかのロギングメッセージを出力する必要があるクラスがあり、そのクラスにメッセージをロギングする手段を提供するコンストラクタ依存性注入を使用するとします。クラスのコンストラクタメッセージをログに記録するための方法を含むインターフェイスへ
- パス:
はあなたには、いくつかのオプションがあります。
- メッセージを直接記録するデリゲートをクラスコンストラクタに渡します。
public interface Log { void WriteLine(string message); // ... Other methods }
をし、クラスには、したがって、このようになります:
インタフェースは次のようになります
public sealed class MyClass
{
readonly ILog _log;
public MyClass(ILog log)
{
_log = log;
}
public void Test()
{
_log.WriteLine("Test() called");
}
}
このクラスは今
ILog
インタフェースに結合され
、および構築それはILog
を実装するオブジェクトを提供する必要があります。あなたの代わりにデリゲートを使用している場合
、クラスは次のようになります。
public sealed class MyClass
{
readonly Action<string> _writeLogLine;
public MyClass(Action<string> writeLogLine)
{
_writeLogLine = writeLogLine;
}
public void Test()
{
_writeLogLine("Test() called");
}
}
今のクラスは、もはやILog
に結合されていない、そしてそれを構築する場合、あなたはそれにデリゲートに一致する任意の方法を渡すことができます: - したがって簡単組成
var myClass = new MyClass(Console.WriteLine);
これはMyClass
の組成が容易になります。
Matthew Watsonと@stakx、皆さんは本当に質問に答えました。私は両方のポイントを与えるだろうが、私はマシューワトソンの答えがより正確であることを見るので、私は彼の答えに目を向けることができます。 –
このMSDNの記事では、インターフェイスの使用と特定の状況での代理人の使用を比較しています。デリゲートは、インターフェイスに比べて簡単な構成を提供しています。どういう意味ですか?あなたは、このようなインターフェイスを持っていると仮定します。あなたがそれらを構成するにはどうすればよい
ICanWrite first;
ICanWrite second;
:
interface ICanWrite {
void Write();
}
は今、あなたは、このようなインターフェースの2件のインスタンスがありますか?だから、どうすれば新しいICanWrite
インスタンスは、Write
メソッドはfirst.Write
とsecond.Write
の両方を実行しますか?簡単ではありません。
は今、あなたの代わりにインタフェースのデリゲートを使用するとします。
static void Main(String[] args)
{
Action write = null; // Action is a delegate type
write +=() => Console.WriteLine("one"); // first write
write +=() => Console.WriteLine("two"); // composition, looks quite easy compared to interfaces
write(); // both delegates are executed ("one two")
}
実際には、独自の専門用語であることを意味していないときは、「簡単組成物」と「簡単に構図を」誤解します。それらは単に、インタフェースよりもデリゲートで構成を容易にする(すなわち、作業を少なくする)ことができることを意味する。
しばらく.NETプログラマーであった場合は、System.Action
デリゲートが分かります。あなたはそれがインターフェースであれば、それはどのようになるかとSystem.Action
を比較したときに、MSDNの記事が何を意味するのかを垣間見ることができます。
delegate void Action();
interface IAction
{
void Execute();
}
インタフェースはいくつかのより多くのタイピングを取るのに対し、デリゲートは、ワンライナーです、メソッドの追加名が必要になります。
MSDNの記事は実際には、代理人とインターフェイスの使用についてです。あなたがコールバックハンドラ、onCompleted
を取り、いくつかの方法があるとしましょう:
void DoSomethingThatTakesVeryLong(Action onCompleted)
{
// do something that might take a while:
…
// notify the caller that we're done:
onCompleted();
}
今何それは、このメソッドを使用するために取るのでしょうか?しかし、インターフェイスタイプであった
DoSomethingThatTakesVeryLong(() => Console.WriteLine("Done."));
onCompleted
場合(のは、上記のIAction
を想定してみましょう)、あなたがラップする必要があるだろう:onCompleted
はデリゲート型である場合には
IAction
を実装するタイプでコールバックコード:
class DoneLogger : IAction
{
public void Execute()
{
Console.WriteLine("Done");
}
}
DoSomethingThatTakesVeryLong(new DoneLogger());
これは、より多くの仕事です:あなたは本当に必要はありませんクラスに非常に簡単なコードをラップする必要があり、あなたがのために名前を思い付くする必要がありますそのクラスをインスタンス化する必要があります。さて、代議員はいないと想像してください。あなたはいつもそれをしなければなりません。それは定型的なコードがたくさんあるからです。
デリゲートがインターフェイスよりも少ない作業を意味することがわかりました。
- 1. Cの簡単な設定パラメータの適切なデータ構造は何ですか?
- 2. 簡単にハック可能なCプリプロセッサとは何ですか?
- 3. C#での簡単なデータベースプログラムの作成
- 4. mysqlテーブルとPHPからサイトを作成する最も簡単で簡単な方法は何ですか?
- 5. コマンドラインで新しいファイルを作成する最も簡単で簡単な方法は何ですか?
- 6. couchdbで簡単なフォトアルバムのデータベースデザインを構成する方法は?
- 7. UITableViewフォームを作成する最も簡単で簡単な方法は何ですか?
- 8. Google App Engineでアプリを構築するための、最も簡単で簡潔なウェブテクノロジは何ですか?
- 9. 簡単なlog4j構成問題
- 10. "簡単"とは何ですか?
- 11. 簡単なもの? C#で
- 12. Cでの簡単なガベージコレクション
- 13. クイズPythonで簡単で簡単なモードを作成する
- 14. C#で簡単なxmlを生成するには?
- 15. C++でスレッドプールを作成する最も簡単な方法は?
- 16. コマンドラインから作成して実行できる最も簡単な目的のCユニットテストは何ですか?
- 17. yii2で簡単なチャットウィジェットを構成する方法
- 18. JavaScriptのゲームで最も簡単なコミュニケーションシステムは何ですか?
- 19. Rubyで最も簡単なサーブレットライブラリは何ですか?
- 20. アーカイブ目的で最も簡単なMacドッカーセットアップは何ですか?
- 21. 簡単な言葉で損失関数とは何ですか?
- 22. 非常に簡単な用語でprecisionStepとは何ですか?
- 23. C#でExcelテーブルを作成する最も簡単な方法は何ですか?
- 24. Managed C++でカスタムボタンテキストを使用してMessageBoxを作成する簡単な方法は何ですか?
- 25. C++で簡単なクロスプラットフォームGUIを作成する最も良い方法は何ですか?
- 26. C#で擬似乱数を生成する最も簡単な方法は何ですか?
- 27. Magento - SQLの変更を可能にする最も簡単なモジュール構成は何ですか?
- 28. .csvから配列を簡単に作成し、C#で検索するのは簡単ですか?
- 29. 簡単なAPIドキュメントを生成するルビーの宝石とは何ですか?
- 30. NSTableViewカスタムセルを作成する最も簡単な方法は何ですか?
私は構成が何であるか知っています。しかし、MSDNは簡単な合成を言う?違いはありますか? –
簡単には、ハードよりも簡単に実現することができます。定義: '偉大な努力なしに達成。 – musefan
あらかじめ定義された技術用語として、「Easy Composition」(大文字)の例を理解してはいけません。彼らは、「構成」という形ではなく、簡単な構成(達成が容易な「構成」の意味で)を意味します。 – stakx