私はGeneric Constraintsを試しています。ようにクラスに制約を宣言する場合:C#インターフェイスの制約
public class DocumentPrinter<T> where T : IFooDoc
を私はDocumentPrinterクラスのメソッド内IFooDocによって宣言されたメソッドにアクセスすることができています。しかし、私が作る場合DocumentPrinterはcontraintを宣言するインターフェース、例えば実装:
public interface IDocumentPrinter<T> where T : IFooDoc
{
void Add(T fooDoc);
void PrintFoos();
}
をして、そのようDocumentPrinterを宣言していない:IFooDocインスタンスの
public class DocumentPrinter<T>: IDocumentPrinter<T>
プロパティ/メソッドは、メソッドの中に使用できなくなっていますドキュメントプリンターの。その型で宣言されたメンバーにアクセスするには、クラス自体にインターフェイス制約を明示的に宣言する必要があるようです。
私はこれを正しく理解していますか、またはインターフェイスで制約を宣言して、その制約をクラスで実現できるのですか?
これは誤解を招きます。メンバにアクセスできるようにクラスに制約を追加する必要はありません。コンパイルするコードに追加する必要があります。 – svick
@svick:「*私はこれを正しく理解していますか、またはインタフェースに制約を宣言し、その制約をクラスで実現できるのですか?」「私の答えが誤解を招くかどうかはわかりません。あなたが*私の答えで指定したように*制約を宣言しなければならない場合、あなたがしなければ暗黙の*があります。あなたがする言語*が必要な何かをやっていないので、コードはコンパイルされませんコンパイルされないコードがあります。しかし、もう一度、問題は*私はこれをしなければならないか、それとも明確にすることなくそれを行う方法があるのですか?*私はその質問に答えました。ダウンフロー? – jason
質問:「タイプ*で宣言されたメンバーにアクセスするには、クラスそのものにインタフェース制約を明示的に宣言する必要があるようです」と言われました。これはOP *コンパイル*しません。だから私はそれを強調することが重要だと思うのです。 – svick