2017-05-22 13 views
0

파생 클래스가있는 기본 추상 클래스가있는 클래스 구조가 있습니다.기본 클래스에서 제네릭 형식을 사용하려면 어떻게해야합니까?

내 기본 클래스는 다음과 같습니다

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>(); 
    } 
} 

그럼 내가이 개 파생 클래스가 있습니다

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>(); 
    } 
} 

을하지만 내가 이런 내 그래프 유연한 유형을 할 수 없어 보인다. 여기서 아이디어는 노드에 다른 객체를 사용할 수있게 해주는 그래프를 만드는 것입니다. 웨이 포인트 그래프인지 타일 기반 그래프인지 여부.

그러나 각 새로운 그래프를 만들 때 유형을 변경할 수있는 유연성을 얻는 방법을 찾는 데 어려움을 겪고 있습니다.

여기에 올바른 방향으로 가고 있습니까? 내 목록에 유형 유연성을 부여하려면 어떻게해야합니까?

답변

4

거의 다 왔어. 당신은 몇 가지 중요한 부분이 누락 :

또한
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() 
    { 
    } 
} 

이주의 당신은 인수가없는 생성자를 구현할 때 명시 적으로 : base()를 작성할 필요가 없습니다를; 컴파일러는 당신을 위해 그것을 수행합니다

+1

아 감사합니다! 이제 나는 그것이 모두 어떻게 연결되는지를 이해한다! – Sir