2011-02-12 27 views
6

Giusto per chiarire, è davvero obbligatorio che tutti i membri di una classe figlia siano dichiarati nella classe astratta sopra di essa?È possibile definire un membro su una classe figlia senza definirlo nella classe genitore astratta? C#

sarebbe possibile una cosa del genere:

public abstract class MyParent 
{ 
    public int x { get; set; } 
} 
public class MyChild : MyParent 
{ 
    public int x { get; set; } 
    public string MyName { get; private set; } 
} 

E 'solo un esempio ... In tal caso, la proprietà MyName non è definito nella classe padre, ma è nella classe del bambino ... È possibile?

Grazie in anticipo!

risposta

4

Sì, è possibile dichiarare proprietà e metodi aggiuntivi nella classe figlio.

Tuttavia, se si sta utilizzando una variabile dichiarata come tipo di antenato, sarà possibile accedere ai membri definiti nel tipo di antenato tramite tale variabile. L'unico modo per ottenere le cose speciali della classe figlia è di digitare fino al tipo figlio.

A parte: la classe bambino deve non duplicare le dichiarazioni fatte nell'antenato. La tua proprietà int x qui causerà problemi perché ci saranno due diverse proprietà x in giro.

una classe figlia concreta (non astratta) è necessario per esclusione eventuali virtuali metodi o proprietà dichiarati nel antenato astratto. Virtual e override richiedono entrambi parole chiave specifiche nella dichiarazione.

2

Sì, è possibile creare nuovi membri in una classe figlia che non si trovano nella classe padre. Questo è il punto di avere lezioni per bambini. Si suppone che la classe figlio "estenda" una classe genitore aggiungendo nuovi membri o modificando il comportamento dei membri esistenti

Tuttavia, non è necessario ricreare i membri della classe genitore nelle classi figlie. Le lezioni secondarie prendono automaticamente tutti i membri dalla classe genitore.

Il codice che hai fornito è un programma C# legale e significa che la tua intenzione è quella di creare un int x diverso per la classe figlio. Questo spesso non è il caso e il compilatore Microsoft C# ti darà un avvertimento a riguardo.

+0

Sono confuso da questa risposta. – spender

+1

@spender. Prova ora – Midhat

2

sì certo che è molto normale per voi farlo. L'unica cosa che non puoi fare è accedere alla proprietà MyName se stai attraversando il genitore. In tal caso, avresti solo accesso a quelli comuni a MyParent.

Problemi correlati