をキャストにジェネリックのparam結果を受け取り、クラスを作成し、私はIInfo
とそのジェネリック版があります。C#の - コンストラクタ例外
public interface IInfo
{
IInput Input { get; }
}
public interface IInfo<T> : IInfo where T : IInput
{
new T Input { get; }
}
クラスの実装:IINPUTからIOutputを作成するための
public class Info : IInfo<IInput>
{
public IInput Input { get; }
public Info (IInput input) {}
}
ファクトリー:
をpublic class GenericFactory<TInput, TOutput> where TInput : IInput where TOutput : IOutput
{
public IOutput Create(IInfo info)
{
ConstructorInfo cInfo = typeof(TOutput).GetConstructor(new[] { typeof(IInfo<TInput>) });
object output = cInfo.Invoke(new object[] {cInfo});
}
}
上記のコードをテストするには:
public class TestInput : IInput
{
}
public abstract class AbstractOutput<TInput> : IOutput where TInput : IInput
{
}
public class TestOutput: AbstractOutput<TestInput>
{
public TestOutput(IInfo<TestInput> info)
{
}
}
public void Test()
{
IInput input = new TestInput();
IInfo info = new Info(input);
var factory = new GenericFactory<TestInput, TestOutput>();
IOutput output = factory.Create(info);
}
私は次のエラーを取得:
Object of type 'Info' cannot be converted to type'Info<TestInput>'.
側の注意点を:私は別の方法で/再書き込みのコードを簡素化するための任意の提案に開いています。
_factoryの定義は表示されません。 – mybirthname
var factory = newでなければならないGenericFactory(); –
alhazen