7

私は一般的な制約を試しています。クラスの制約を次のように宣言する場合:

    public class DocumentPrinter<T> where T : IFooDoc

DocumentPrinter クラスのメソッド内で IFooDoc によって宣言されたメソッドにアクセスできます。ただし、制約を宣言するインターフェイスを DocumentPrinter に実装させると、次のようになります。

public interface IDocumentPrinter<T> where T : IFooDoc
{
    void Add(T fooDoc);
    void PrintFoos();
}

DocumentPrinter を次のように宣言します。

   public class DocumentPrinter<T>: IDocumentPrinter<T>

IFooDoc インスタンスのプロパティ/メソッドは、ドキュメント プリンターのメソッド内では使用できなくなりました。型で宣言されたメンバーにアクセスするには、クラス自体にインターフェイス制約を明示的に宣言する必要があるようです。

私はこれを正しく理解していますか、それともインターフェイスで制約を宣言し、その制約をクラスで実現することは可能ですか?

4

2 に答える 2

3

IFooDoc インスタンスのプロパティ/メソッドは、ドキュメント プリンターのメソッド内では使用できなくなりました。

まあ、コードがコンパイルされないときにIntelliSense が教えてくれることは、ちょっと関係ありません。

IDocumentPrinter<T>を実装したい場合は、その制約を満たさなければなりません。そうしないと、コードはコンパイルされません。

于 2013-06-30T15:07:39.650 に答える