Sto provando a creare un sistema di ereditarietà dell'interfaccia che utilizza la stessa proprietà ma sempre di un altro tipo derivato. Quindi la proprietà di base dovrebbe essere in qualche modo sovrascritta o nascosta dall'interfaccia derivante.Le proprietà dell'interfaccia C# derivate possono sovrascrivere le proprietà dell'interfaccia di base con lo stesso nome?
Prendere, ad esempio, due interfacce, Uomo e Donna, che derivano in Marito e Moglie, anche interfacce. Le interfacce uomo e marito hanno entrambe una proprietà "dolce", mentre la donna e la moglie hanno una proprietà "cara". Ora, la proprietà "tesoro" dell'uomo è di tipo Donna, mentre la stessa proprietà "tesoro" del marito dovrebbe essere una moglie (derivata dalla donna). E lo stesso con la proprietà "cara" della donna e della moglie.
public interface Man // base interface for Husband
{
Woman sweetheart { get; set; }
}
public interface Woman // base interface for Wife
{
Man darling { get; set; }
}
public interface Husband : Man // extending Man interface
{
new Wife sweetheart { get; set; } // narrowing "sweetheart" property's type
}
public interface Wife : Woman // extending Woman interface
{
new Husband darling { get; set; } // narrowing "darling" property's type
}
public class RandomHusband : Husband // implementing the Husband interface
{
private RandomWife wife;
public Wife sweetheart { get { return wife; } set { wife = value; } }
}
public class RandomWife : Wife // implementing the Wife interface
{
private RandomHusband husband;
public Husband darling { get { return husband; } set { husband = value; } }
}
Questo codice è errato, non funziona. Sono stato informato che non ho implementato le proprietà di base Man.sweetheart
e Woman.darling
e che l'implementazione Husband.sweetheart
e Wife.darling
non verrà eseguita, poiché i tipi non corrispondono. Esiste un modo per restringere il tipo di una proprietà a una derivata? Come si ottiene in C#?
domanda interessante :) – nawfal