首页 文章

用于从集合中填充类数据的操作或接口

提问于
浏览
1

我有一个包含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
}

TRI和QUAD类都有多个实例 . 这些包含在字典中,如下所示:

// Element Collection
var Elements = new Dictionary<int, Element>();

Elements Key(int值)将与名为 vertex1 的TRI / QUAD字段重合,依此类推 . 在实例化Element-type类时,我不知道顶点的坐标 . 因此,在创建字典之后,我需要循环并从Vertex字典中提取顶点数据并使用它来填充空白 .

foreach (var Elm in Elements)
{
    // this is where I need help.
}

QUAD元素需要从Vertexs字典中提取四个顶点,而TRI元素需要拉三个 . 所以我的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个输入而不是3个 .

我对接口和所有委托类型的经验很少(只有简单的书籍示例没有帮助我)所以我真的不知道如何继续 . 我需要一个函数“fetch_vertex_coords”,它将采用3个参数,一个将采用4,我不知道是否应该在这里使用接口或动作(委托) .

我是否因为使用“Elements”字典值作为元素而难以理解?仅供参考我的抽象类“元素”字面上是空白的,因为我不知道是否应该用字段填充它,因为派生类已经有字段 . 对此的任何评论也将受到赞赏 .

创造更多词典总是有后盾;一个用于TRI,一个用于QUAD,然后在我使用简单方法填充顶点数据之后将它们组合 . 但是我已经做到了这一点,我想学习一些关于接口和/或代理的实用知识 .

2 回答

  • 1

    好吧,如果你考虑TRI和QUAD是如何相同的,它们都存储顶点的“列表”,除了TRI有三个,而QUAD有四个 . 不是只有两个具有不同离散变量数量的类v1,v2,v3,为什么不只是有一个包含Vertex对象数组的具体Element类?这可能允许您编写更容易处理顶点的代码 . 您不必担心是否有TRI或QUAD并调用不同的方法,您只需要查看数组的长度并循环多次 .

  • 1

    为什么要TRI和QUAD继承Element?正如你所说,Element是空的,这意味着TRI和QUAD不会看到为什么你应该试图强制两种类型继承一种基类型 . 您可能只使用两个词典 Dictionary<int, TRI> and Dictionary<int, QUAD> .

相关问题