2017-05-22 7 views
0

Ich habe eine Klassenstruktur mit einer abstrakten Basisklasse mit abgeleiteten Klassen.Wie verwende ich einen generischen Typ in meiner Basisklasse?

Meine Basisklasse sieht wie folgt aus:

public abstract class Graph 
{ 
    public Dictionary<Vector3, int> Dictionary { private set; get; } 
    public List<T> List { set; get; } 

    public Graph() 
    { 
     Dictionary = new Dictionary<Vector3,int>(); 
    } 
} 

Dann habe ich 2 abgeleiteten Klassen:

public class Graph_Waypoints : Graph 
{ 
    public Graph_Waypoints() : base() 
    { 
     List = new List<Waypoint>(); 
    } 
} 
public class Graph_Tiles : Graph 
{ 
    public Graph_Tiles() : base() 
    { 
     List = new List<Tile>(); 
    } 
} 

Aber es scheint, ich meine Graph nicht tun können flexible Typen für so. Die Idee hier ist, ein Diagramm zu erstellen, das mir erlaubt, verschiedene Objekte für seine Knoten zu verwenden. Ob es sich um einen Wegpunktgraphen oder einen Kachelgraphen handelt.

Aber ich kämpfe um herauszufinden, wie man die Flexibilität dafür erhält, um den Typ zu ändern, wenn ich jedes neue Diagramm erstellen.

Gehe ich hier in die richtige Richtung? Wie kann ich die Typeflexibilität auf meiner Liste finden?

Antwort

4

Sie sind fast da; Sie fehlt nur einige der wichtigsten Teile:

public abstract class Graph<T> // <-- Graph must be generic 
{ 
    public Dictionary<Vector3, int> Dictionary { private set; get; } 
    public List<T> List { set; get; } 

    public Graph() 
    { 
     Dictionary = new Dictionary<Vector3, int>(); 
     // You could initialize the list as you did before, but it's cleaner to do it here 
     List = new List<T>(); 
    } 
} 

public class Graph_Waypoints : Graph<Waypoint> // <-- Subclasses must provide the base class generic arguments 
{ 
    public Graph_Waypoints() : base() 
    { 
    } 
} 
public class Graph_Tiles : Graph<Tile> 
{ 
    public Graph_Tiles() : base() 
    { 
    } 
} 

Beachten Sie auch, Sie müssen nicht explizit : base() schreiben, wenn Argument lose Konstrukteurs Umsetzung; der Compiler macht es für Sie

+1

Ah danke! Jetzt verstehe ich, wie alles miteinander verbindet! – Sir

Verwandte Themen