Скажем, у меня есть следующий 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
}
}
Не имеет ли смысл, что ограничения типа также «унаследованы» (а не правильное слово, я знаю) из интерфейса?
Возможно, они были реализованы «по умолчанию», если ничего не указано. Но фактический синтаксис позволяет переопределить ограничения (наследование, новое() ключевое слово и т. Д.), Что хорошо. – AFract