我與泛型約束實驗。當一個類聲明的約束像這樣:C#接口約束上
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實例的方法不再是方法中可用的文檔打印機。看來,如果我要訪問類型聲明的成員,我必須明確地聲明一個類本身的接口約束。
我是否正確理解這一點還是可以聲明接口上的約束和有約束由類實現呢?
這是誤導性的,你不必爲該類添加約束來訪問成員,你必須添加它以供代碼編譯。 – svick
@svick:上面提到的問題是「*我是否正確理解了這個問題,或者是否有可能在接口上聲明約束條件並讓該類約束得到該約束?」不確定我的答案是如何誤導的。如果你必須在我的答案中聲明約束條件*,那麼就有一個隱含的*,如果你不這樣做,那麼代碼將不會編譯*因爲任何時候你不會做某種語言*需要*你做的事情,你有代碼不會編譯。但是,問題是,我必須這樣做,還是有辦法做到這一點,而不是明確的。*我回答了這個問題。 Downovting? – jason
這個問題說:「我似乎必須顯式聲明一個接口約束類本身*如果我要訪問類型聲明的成員*。」對我來說,這表明OP *沒有實現代碼獲得編譯*。這就是爲什麼我認爲強調這一點很重要。 – svick