2014-10-02 14 views
5

Sto facendo un programma con più tipi di alberi binari in esso. Così ho deciso di fare una lezione astratta, per evitare di copiare il codice. Ma c'è un problema, i nodi di ogni albero devono contenere figli dello stesso tipo del nodo stesso. C'è qualche mezzo per definirlo in astratto, o dovrei semplicemente fare classi diverse per ogni tipo, dopo tutto?Astratto con ereditario come campo

public abstract class BinaryNodeAbstract<T> 
{ 
    public T Value; 
    public BinaryNodeAbstract<T> Left; 
    public BinaryNodeAbstract<T> Right; 

In questo modo, i nodi potrebbero essere di qualsiasi tipo BinaryNode. Questo è ciò che deve essere evitato.

+1

aggiungere 'dove T: BinaryNodeAbstract ', ma può essere solo una soluzione parziale –

+0

Quindi cosa c'è di sbagliato con l'implementazione? Sembra solo buono. –

+0

Cosa c'è di sbagliato in ciò che hai? E ha anche bisogno di essere astratto? – bornfromanegg

risposta

7

si dovrebbe includere il tipo di genitore troppo, per mantenere il tipo ereditato il Left e Right (altrimenti non è possibile utilizzare il tipo ereditato il realizzatore):

public abstract class BinaryNodeAbstract<T, L> where L : BinaryNodeAbstract<T, L> 
{ 
    public T Value; 
    public L Left; 
    public L Right; 
} 

è possibile utilizzarlo in questo modo:

public class BinaryNodeImplementation : BinaryNodeAbstract<int, BinaryNodeImplementation> 
{ 
} 
+0

Awh man, è pazzo. Ci sto provando ora, sembra che dovrebbe funzionare. Grazie. – Ozitiho

+0

Per il downvoter: perché? –

Problemi correlati