が、それは例えば匿名型から継承することは可能ですが、私は今、私はいくつかの新しいを追加することによって、既存のクラスを拡張するクラスを定義したい継承
public interface IFoo{
int A { get; set;}
string B { get; set;}
}
public interface IBoo : IFoo{
decimal C { get; set;}
}
public class Foo: IFoo {...}
public class Boo: IBoo {...}
のようないくつかのクラスとインタフェースを持っています同様に、すべてのクラスに適用される特性:
public class Extended<T> : T where T: IFoo
{
bool D { get; set;}
}
のでExtended<Foo>
の場合の結果として、Extended<Foo>
内部特性は次のようになります
public int A { get; set;}
public string B { get; set;}
public bool D { get; set;}
私は、これはコンパイルエラーになります知っている:
CS0689: Cannot derive form 'T' because it is a type parameter
が、なぜこれが適用されませんの?限り、私は宣言
現在のソリューションで制約を入れていますよう:私はIBoo
を実装IFoo
とExtendedBoo
を実装するクラスExtendedFoo
を作成する必要があり、私の懸念は方法または回避策がある場合は一般的なものを定義することができることですこれらのクラスのすべてを継承して、インタフェースFooを実装します。
は私の質問は、あなたがそのようそれが唯一の変数Tにあなたのタイプを与え、ジェネリッククラスはジェネリック型を継承したり実装していない、あなたが求めているものを行うことはできません明らか
いいえ、できません。タイプシステムはそれを許可しません。これをやろうとして何を達成しようとしていますか? – Enigmativity
[C#8](https://channel9.msdn.com/Blogs/Seth-Juarez/A-Preview-of-C-8-with-Mads-Torgersen)のデフォルトインタフェースの実装と拡張のすべてについて説明しています。 – Theraot
@mjwills私は質問を更新しました。私はすでに現在のソリューションを含んでいましたが、あなたが持っているすべてのクラス(これは200以上のエンティティがあると想像してください)でこれを行う必要があり、 'IFoo'は拡張可能なエンティティ実際にはプロパティを持つことを意図したものではありません。私は、C#でこのような実装があるべきだと信じています。 – Monah