Скажем, у меня такой интерфейс и конкретная реализация
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
Итак, я создаю реализацию MyConcrete для strings
, у меня может быть еще одна конкретная реализация для int
. И это нормально. Но позвольте сказать, что я хочу сделать то же самое, но с помощью общих методов, поэтому у меня есть
public interface IMyInterface2
{
T My<T>();
}
public class MyConcrete2 : IMyInterface2
{
public string My<string>()
{
throw new NotImplementedException();
}
}
Итак, у меня есть тот же IMyInterface2
, но который определяет общее поведение с помощью T My<T>()
. В моем конкретном классе я хочу реализовать поведение My
, но для конкретного типа данных - string
. Но С# не позволяет мне это делать.
Мой вопрос, почему я не могу этого сделать?
Другими словами, если я могу создать конкретную реализацию MyInterface<T>
как MyClass : MyInterface<string>
и остановить обобщенность в этой точке, почему я не могу сделать это с помощью общего метода - T My<T>()
?