2
ARGデリゲートとジェネリックインスタンスを作成します。私はTの新しいインスタンスを作成しようとしていますが、問題はTがコンストラクタに代理引数を持っていることです。唯一[オブジェクト]タイプが[アクティベータ]で引数として許可されているようは、私はジェネリックを導入することにより、いくつかのコードをリファクタリングしようとしている、と私は行き詰まって
public delegate IOrders DoStuffDelegate();
public class GenericBoss<T> where T:Worker
{
public void DelegateWork()
{
T worker = Activator.CreateInstance(typeof(T), new[]{GiveOrders})
worker.Work();
}
public IOrders GiveOrders()
{
return new OrderFromTheBoss();
}
}
public class Worker
{
private readonly DoStuffDelegate _takeOrders;
public Worker(DoStuffDelegate takeOrders)
{
_takeOrders = takeOrders;
}
public void Work()
{
_takeOrders();
}
}
しかし、これは、動作しません:何私が目指していたことは、このようなものでした。私はコンストラクタを変更することは許されていないので、デリゲートを別の場所に移動することはできません。
はアウト方法はありますか、またはジェネリックは、ここではオプションではありませんか?
よろしく、 モートン
を経て発見された適切なデリゲート型のインスタンスを作成するために 'Activator.CreateInstance'は、この場合にはオブジェクトを返す?' as'キャストやジェネリックバージョンがあるべき適用される。 –
@Danny:はい、キャストが必要になる - にそれを追加します、私は物事の引数側に焦点を当てた、私はOPのオリジナルの問題であると考えている:) –
はい、私は戻ってTにキャストしなければならなかったが、。それは働いた。ありがとうございました。あなたは私のコードをもっときれいにしました:o) – Morten