Sto scavando in covarianza e controvarianza in C # e c'è una cosa che non riesco a capire. C # (AFAIK, versione 4) consente di dichiarare le interfacce e i delegati covarianti o controvarianti usando out
e in
parole chiave. Tuttavia, la dichiarazione della classe astratta con tali parole chiave non è possibile. Qualcuno potrebbe condividere un'idea sul perché è stato creato così? Comprendo problemi generali e problemi di covarianza e controvarianza, LSP e così via. Tuttavia, non ero in grado di farmi un'idea del perché la classe astratta non è semanticamente adatta ad essere covariante o controvariante, mentre l'interfaccia lo è.
Ecco un esempio della classe astratta solo per completezza. Non verrà compilato.
public abstract class SomeList<out T> where T : class
{
}