Diciamo che ho questo tipo di interfaccia e l'attuazione concretaInterfaccia con parametro generico vs Interfaccia con metodi generici
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
Così ho creare implementazione MyConcrete per strings
, posso avere un altro implementazione concreta per int
. E va bene Ma diciamo che io voglio fare la stessa cosa, ma con metodi generici, quindi devo
public interface IMyInterface2
{
T My<T>();
}
public class MyConcrete2 : IMyInterface2
{
public string My<string>()
{
throw new NotImplementedException();
}
}
Così mi hanno lo stesso IMyInterface2
, ma che definisce il comportamento generico mediante T My<T>()
. Nella mia classe concreta voglio implementare il comportamento My
, ma per il tipo di dati concreti - string
. Ma C# non mi consente di farlo.
La mia domanda è perché non posso farlo? In altre parole, se posso creare un'implementazione concreta di MyInterface<T>
come MyClass : MyInterface<string>
e interrompere genericità a questo punto, perché non posso farlo con il metodo generico - T My<T>()
?
Non è possibile * ridurre * le abilità quando si ereditano i tipi, è possibile solo aggiungerle. –