比方說,我有一個如下的C#接口:爲什麼實現具有類型約束的泛型接口的泛型類需要重複這些約束?
public interface IInterface<T> where T : SomeClass
{
void InterfaceMethod();
}
,並按如下SomeClass的定義:
public class SomeClass
{
public void SomeMethod();
}
現在,我想定義接口的實現,這將不編譯:
public class InterfaceImpl<T> : IInterface<T>
{
public void InterfaceMethod()
{
T test = default(T);
test.SomeMethod(); //Gives Error
}
}
之前,我將其更改爲:
public class InterfaceImpl<T> : IInterface<T> where T : SomeClass
{
public void InterfaceMethod()
{
T test = default(T);
test.SomeMethod(); //Compiles fine
}
}
從界面中類型約束是否也是「繼承的」(不是我所知道的正確的詞)是不合理的?
如果沒有指定,他們可能已經「默認」實現了。但實際的語法允許重新定義約束(繼承,new()關鍵字等),這很好。 – AFract 2015-02-05 18:32:10