Im stava leggendo un esempio di ereditarietà semplice e si è imbattuto nell'idea di base che un quadrato è un tipo di base e un rettangolo deriva da un quadrato.Esempio di ereditarietà scadente in C#
L'esempio per l'impostazione delle dimensioni quadrate usato una proprietà chiamata Size
. L'esempio per il rettangolo ha quindi utilizzato Width
e Height
.
Questo non ha senso nella mia testa, quindi l'ho codificato.
Il problema sembra essere che quando si accede a rectangle
, ci sarà sempre una proprietà di confusione chiamata 'Size
' presente.
Ho capito bene? O c'è un modo per nascondere altre classi dal vedere Size
quando si guarda a rectangle
?
public class square
{
public int Size { get; set; }
public square(int size)
{
this.Size = size;
}
}
public class rectangle : square
{
public int Width { get { return base.Size; } set { base.Size = value; } }
public int Height { get; set; }
public rectangle(int width, int height)
: base(width)
{
Height = height;
}
}
Dovrebbe essere il contrario: piazza dovrebbe derivare da un rettangolo. Un quadrato ha anche una larghezza e un'altezza, sono semplicemente uguali per il quadrato. Un rettangolo può, ovviamente, avere valori diversi. – xxbbcc
Non è il primo povero esempio di ereditarietà che incontrerai nel tuo studio o la tua carriera. Congratulazioni per avvistarlo, odore google code qualche volta ... –
@Tod L'articolo 35 è "Considera alternative alle funzioni virtuali". La mia risposta non contiene una singola funzione virtuale (infatti, a meno che tu non abbia derivato un'altra classe da 'Square' o' Rectangle' non puoi mutare un oggetto di nessuno dei due tipi), quindi ti prego di commentare come questo rende la mia risposta " morto sbagliato? " –