クラスライブラリ内のオブジェクトに、メッセージの出力方法を気にせずにメッセージを出力する機能を提供したいと考えています。クラスライブラリは、コンソールアプリケーション、WinFormまたはWPFウィンドウアプリケーション、またはWebページで使用できます。何を使用しますか?デリゲート、イベント、またはFunc <T>?
私は元々、これを処理するために代理人を使うことに決めました。私はクラスを使用してこれを実装しましたが、コンパイラはデリゲートをこれらのオブジェクトのそれぞれが持つインターフェイスにデリゲートを入れようとしたときにデリゲートを気に入らなかった。
デリゲートをインターフェイスから外してコンパイルすることができたことがわかりましたが、これが実行しようとしていることがわかりません。また、クルージュのように思えますあなたのいずれかが...
インタフェースこれを達成するためのさまざまなアイデアを持っている場合:そこから
namespace Test
{
using System;
using System.Xml.Linq;
public interface IAction
{
DisplayMessageDelegate DisplayMessage(string message);
void Execute();
XElement Serialize(XName elementName);
}
public delegate void DisplayMessageDelegate(string message);
}
を、私はこの動作を実装するかどうかはわかりません:(ところで、私はこのコードがないことを知っていますコンパイル...)
public class ActionClass1 : IAction
{
// Other methods not shown...
void Execute()
{
if (this.DisplayMessage != null)
{
this.DisplayMessage(“Hello”);
}
}
}
public class ConsoleClass
{
ActionClass1 class1 = new ActionClass1();
class1.DisplayMessage = { x => Console.WriteLine(x); };
}
public class WinFormClass
{
ActionClass1 class1 = new ActionClass1();
Class1.DisplayMessage = {x => DisplayTextBox.Text = x; };
}
params、ref/outなどよりも複雑なものが必要な場合は、言及する必要があります。Action/Funcは動作しません。また別の「きれいな」とは、パラメータに適切な名前を付けることです(インテリセンス)。それは私もアクションを使用すると言われています。 –
Jake