2012-03-22 101 views
1

我有一個基類和一個名爲Node的派生類,它們構成一個Graph的元素。 我想定義一個DerivedGraph,它只能存儲DerivedNodes,並且可能有一些DerivedNode特定的方法。這兩個節點必須是可變的。在派生類中處理派生成員的標準實踐

處理這個問題的標準做法是什麼? 重複數據成員顯然是要避免的。 應該通過屬性中的類型檢查和投射來完成嗎?

public class Node {} 
public class DerivedNode : public Node {} 

public class Graph 
{ 

    private List<Node> nodes; 

    //some code 
} 

class DerivedGraph : Graph {} 

編輯:

我要補充,我需要的是圖形可以包含節點和DerivedNodes

回答

2

我會建議使用Generics來解決這個問題的功能。

public class Node {} 
public class DerivedNode : public Node {} 

public class Graph<T> where T : Node 
{ 

    private List<T> nodes; 

    //some code 
} 

class DerivedGraph : Graph<DerivedNode> {} 

這將允許您指定任何NodeDerivedNode實例化類時。

+0

你需要T是一個Node對象 – 2012-03-22 15:37:50

+0

@邁克爾將我仍然能夠有一個包含節點和DerivedNodes的圖形的約束? – gwizardry 2012-03-22 15:39:07

+0

@DaveS好主意......修正。 – 2012-03-22 15:39:15

0

也許做一個通用的Graph和擴展方法Graph其中T:DerivedNode?注意:剛進入我的腦海,還沒有這樣做。但是,這可以工作,並保持您的代碼清潔。

您可以使Graph爲通用並從Graph繼承。所以,你會不會擴展方法

0

做正確的做法麻煩,是用一個通用Graph類,然後添加constraints on its typed parameter,以確保它是NodeNode派生:

public class Node {} 
public class DerivedNode : Node {} 

public class Graph<T : Node> // <<=== 
{ 
    private List<T> nodes; 
    //some code 
} 

class DerivedGraph : Graph<DerivedNode> {} 
+0

還沒見過的語法是否與之前相同T:Node? – gwizardry 2012-03-22 15:37:34

0

你可以泛型;像

public class Graph<T> where T : Node 
{ 

    private List<T> nodes; 

    //some code 
} 

class DerivedGraph : Graph<DerivedNode> {} 
0

使用泛型:

public class Node 
{ 
} 

public class DerivedNode : Node 
{ 
} 

public class Graph<T> 
    where T : Node 
{ 
    private List<T> nodes; 

    //some code 
} 

public class DerivedGraph : Graph<DerivedNode> 
{ 
} 
相關問題