3 つのクラスがあります。1 つの基本クラスは、インターフェイスを実装する必要があるジェネリック型を受け取る抽象クラスのサブクラスである必要があるジェネリック型を受け取ります。
テストのために、抽象クラスのサブクラスとインターフェイスの実装を提供する基本クラスを開始するフォームがあります。これが私のクラス宣言であり、基本クラスのコンストラクターへの呼び出しです。
public class BaseClass<AC_IC> where AC_IC : AbstractClass<InterfaceClass>
public abstract class AbstractClass<IC> where IC: InterfaceClass
public interface InterfaceClass
public class ExtendsAbstractClass<II> : AbstractClass<InterfaceClass>
public class ImplementsInterface : InterfaceClass
vBC = new BaseClass<ExtendsAbstractClass<ImplementsInterface>>();
次の呼び出しを使用して、BaseClass と AbstractClass 内から継承/実装クラスの両方のインスタンスを作成できると信じていました (コンストラクターにパラメーターを持つクラスは 1 つだけです)。
(AC_IC) Activator.CreateInstance(typeof(AC_IC), new object[] { vParameter});
(II) Activator.CreateInstance(typeof(II));
編集: 上記の呼び出しは BaseClass と AbstractClass 内にあるため、後で使用するクラスがわからないため、クラス名で指定することはできません。実装の範囲には、さまざまなクラスのペアが多数存在する可能性があります。
これらのコンストラクター呼び出しの両方で、「抽象クラスのインスタンスを作成できません」および「インターフェースのインスタンスを作成できません」というエラーが発生します。where
ジェネリック型として渡すクラスが句内のクラスのサブクラスであるため、作成できることをコンパイラに知らせるにはどうすればよいですか。
任意のアイデア コミュニティ???