Рассмотрим следующие строки кода:Загадка меня: почему возникает ошибка реализации неявного интерфейса?
public interface IProduct
{
string Name { get; set; }
}
public interface IProductList
{
string Name { get; }
IProduct GetValueObject();
}
public abstract class BaseProductList<T> : IProductList where T : class, IProduct, new()
{
public abstract T GetValueObject();
public string Name { get; set; }
}
Это дает мне следующее предупреждение:
(Error 1 'ConsoleApplication1.EnumTest.BaseProductList' не реализации элемента интерфейса «ConsoleApplication1 .EnumTest.IProductList.GetValueObject() '. ' ConsoleApplication1.EnumTest.BaseProductList.GetValueObject() ' не может реализовать ' ConsoleApplicat ion1.EnumTest.IProductList.GetValueObject() ', потому что не имеет соответствующего типа возврата ' ConsoleApplication1.EnumTest.IProduct '. \ Cencibel \ дома $ \ k.bakker \ визуальной студии 2010 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ EnumTest \ Program.cs 29 23 TestApp)
Но когда я добавляю этот явный кусок кода, он работает :
IProduct IProductList.GetValueObject()
{
return GetValueObject();
}
Почему не .Net фигуры это один из !?
Ух ты ... теперь я знаю, что мне нравится, когда я пытаюсь поговорить с кем-то по-испански. Есть ли у меня материал для чтения? –
@ KeesC.Bakker: отредактировал ссылку в ответ. В основном это не относится к дженерикам - это всего лишь функция (ковариантные типы возврата), которая вообще не поддерживается .NET и никогда не была. –
Ах, правда, пропустил ссылку. –