我有一個包含x,y,z座標的頂點類。這個類具有包含在以下詞典多個實例:從集合中填充類數據的動作或接口
// Vertex Collection
var Vertexs = new Dictionary<int, Vertex>();
public class Vertex
{
public double x, y, z;
}
我有三個類,如下所示:
public abstract class Element
{ }
public class TRI : Element
{
public int vertex1, vertex2, vertex3;
public double v1x, v1y, v1z;
// and so on for vertex 2 & 3
}
public class QUAD : Element
{
public int vertex1, vertex2, vertex3, vertex4;
public double v1x, v1y, v1z;
// and so on for vertex 2, 3 & 4
}
有兩個三和四類的多個實例。這些都包含在一個字典如下:
// Element Collection
var Elements = new Dictionary<int, Element>();
元素密鑰(int值)將與命名vertex1
等的TRI/QUAD字段一致。在實例化Element類型的類時,我不知道頂點的座標。所以在創建字典之後,我需要循環並從頂點字典中提取頂點數據並用它填充空格。
foreach (var Elm in Elements)
{
// this is where I need help.
}
四元素需要從Vertexs詞典拉四個頂點和三元素需要拉三人。所以我的TRI功能應該看起來像這樣。
public void fetch_vertex_coords(Vertex vertex1, Vertex vertex3, Vertex vertex3)
{
v1x = vertex1.x; v1y = vertex1.y; v1z = vertex1.z;
v2x = vertex2.x; v2y = vertex2.y; v2z = vertex2.z;
v3x = vertex3.x; v3y = vertex3.y; v3z = vertex3.z;
}
的問題是,QUAD需要調用void函數爲好,但將有4個輸入,而不是三個。我對接口和所有委託類型的經驗都很少(只有簡單的書本例子不能幫助我),所以我並不真正知道如何繼續。我需要一個函數「fetch_vertex_coords」,它需要3個參數,一個需要4個參數,我不知道這裏是否應該使用接口或動作(委託)。
我是否在使用「元素」字典值作爲元素時很費力?僅供參考我的抽象類「元素」字面上是空白的,因爲我不知道是否應該填充字段,因爲派生類已經有字段。對此的任何評論也將不勝感激。
創建更多字典總是存在回退;一個用於TRI,另一個用於QUAD,然後在我使用簡單的方法填充頂點數據後再組合它們。但是我已經得到了這麼多,我想了解一些關於接口和/或代表的實際操作。
該程序將顯示圖形。稍後在我的gameLoop中,我將繪製繪製TRI和QUAD元素的函數。我想盡可能保持緊湊,所以... TRI和QUAD從Element繼承,這樣我就可以將它們組合成單個字典。這樣,我只有一個字典可以循環更新環境。您提到我必須以各種方式投射每個項目......我認爲無論是界面還是操作都可以決定使用哪種方法(3個vertex或4個或更多)。我現在想要棄用多個Dict,因爲我實際上有> 10個。 – Todd 2013-03-20 03:35:06