次の宣言を持つ2つのクラスがあります。
abstract class ClassBase<T, S> where T : myType where S : System.Data.Objects.DataClasses.EntityObject
abstract class ServiceBase<T> where T : myType
他に2つのクラスがあり、それぞれから1つずつ継承します。これで、 ClassAliExpressとServiceAliExpressを呼び出すことができます。2つのサービスクラスは他の2つと同じプロジェクトにないことに注意してください。
アイデアは、ServiceBase
クラスで次のようなプロパティを宣言protected ClassBase<T,System.Data.Objects.DataClasses.EntityObject> Class { get; set; }
し、継承されたサービスのコンストラクタで次のようなプロパティを宣言できるということです。this.Class = ClassInheritedInstance
私はすでにアイデアを実装しましたが、Service合計クラスコンストラクターでClassプロパティを割り当てると、次のエラーが発生します。
タイプ「ClassAliExpress」を「ClassBase<T、S>」に暗黙的に変換することはできません
ClassAliExpressは確かにClass<T,S>
...の仕様であることに注意してください。コンパイラが型を正しく認識できないように見えるだけです。また、クラスプロパティの宣言をprotected ClassBase<T, EntityObjectInherited>
機能するように変更すると、EntityObjectAliExpressはSystem.Data.Objects.DataClasses.EntityObject
...の実装になります。なぜ問題があるのかわかりません。
アップデート1
コンパイル時にのタイプClassInherited
は既知であることに注意してください。その宣言は次のとおりです。public class ClassInherited : ClassBase<myTypeInherited, EntityObjectInherited>