1. ホーム
  2. c#

[解決済み] C#で汎用基底クラスを継承し、制約条件を適用し、インターフェースを実装する

2022-05-13 23:40:32

質問

これは構文の質問です。汎用基底クラスを継承した汎用クラスがあり、型パラメータの1つに制約を適用しています。また、派生クラスがインターフェイスを実装するようにしたいです。どうしても、正しい構文がわかりません。

これが私の持っているものです。

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }

最初に思い浮かんだのは、これでした。

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }

しかし、それでは T2 が IBar と IFoo の両方を実装する必要があり、IFoo を実装するための DerivedFoo ではないので、それは正しくありません。

コロンやセミコロンの使い方など、ちょっとググってみましたが、なかなか出てきませんね。きっと答えは簡単なんだろうけど。

どのように解決するのですか?

ジェネリック制約を定義する前に、クラスのシグネチャ全体を含めます。

class DerivedFoo<T1, T2> : ParentFoo<T1, T2>, IFoo where T2 : IBar
{
    ...
}