Учитывая следующий класс и интерфейс:Дженерики и проблема интерфейса
public class Test<T>
{
}
public interface ITesting<T>
{
Test<T> LoadTest();
}
Я могу добавить класс со следующим:
public class TestManager : ITesting<object>
{
#region ITesting
public Test<object> LoadTest()
{
return new Test<object>();
}
#endregion
}
Который работает нормально и не приводит к возникновению ошибок. Если я пытаюсь заменить этот класс следующим:
public class TestDerived : Test<object>
{
}
public class TestDerivedManager : ITesting<object>
{
#region ITesting
public TestDerived LoadTest()
{
return new TestDerived();
}
#endregion
}
теперь я получаю следующее сообщение об ошибке:
Error 'TestDerivedManager' does not implement interface member 'ITesting.LoadTest()'. 'TestDerivedManager.LoadTest()' cannot implement 'ITesting.LoadTest()' because it does not have the matching return type of 'Test'.
Но мне кажется, что это должно работать как TestDerived
является Test<object>
. Я, очевидно, не понимаю что-то правильно здесь. Может ли кто-нибудь указать мне, почему это неверно? И, возможно, что я могу сделать, чтобы исправить это?
Я отмечаю, что это поведение не имеет ничего общего с дженериками. Если у вас есть интерфейс I {Animal M(); } класс C: I {public Giraffe M() {return new Giraffe(); }} 'вы получите ту же ошибку. –