2010-12-10 54 views
5

比方說,我有一些基本的接口,該接口是泛型驅動:C#泛型的問題 - 通用接口約束

public interface Inteface<T> { 
    void Foo(T t); 
} 

現在我有一些具體的實現此接口的,這也是通用:

public class InterfaceImpl<T> { 
    public void Foo(T t) { 
     // Whatever 
    } 
} 

這看起來不錯,但現在讓我們說我有其他類:

public class Ololo { 
    public void BadFunction<TShouldModelInterface>(TShouldModelInterface shouldModelInterface) { 
     // Whatever 
    } 
} 

而且我們說我想執行檢查,如果TShouldModelInterface實際上實現了任何可能的Interface<T>

如果界面不是通用的,我會簡單地寫一些類似where TShouldModelInterface : Interface的東西。

但是,有沒有什麼辦法可以解決這個問題,如果接口是?

+1

我修改你的標題了一點,所以它不太通用 – 2010-12-10 11:31:50

+0

@Daniel Ahahah ..的確少了「通用」 – 2010-12-10 11:40:25

+0

在你的榜樣「」 InterfaceImpl 「」不實現'Inteface 「」(缺少「r」,順便說一句)。你應該聲明它爲''public class InterfaceImpl :Inteface '' – 2010-12-10 11:49:19

回答

8
public class Ololo { 
    public void BadFunction<TShouldModelInterface, T>(TShouldModelInterface shouldModelInterface) 
     where TShouldModelInterface : Interface<T> 
    { 
     // Whatever 
    } 
}