【发布时间】:2016-05-10 18:53:09
【问题描述】:
标题可能会产生误导,因为我在搜索甚至创建正确问题时遇到了一些麻烦,所以让我给出一个我正在努力解决的真正问题:
我有一个Graph 课程。由于图形需要节点和边,我创建了两个额外的类Node(顶点)和Edge。我的结构如下所示:
class Graph
{
List<Node> nodes;
List<Edge> edges;
public Graph( ... ) { /* populate lists */ }
}
class Node { ... }
class Edge { ... }
我为Node 类写了一些方法,其中一个对我来说特别成问题。签名:
public List<Node> GetNeighbours(List<Edge> edges) { ... }
相当标准。给定一张图,我问一个节点:你有多少个邻居?我需要边缘列表来解决它。
如何重构此代码,以便可以在内部使用 Graph 属性/字段,而不是每次都传递边列表?这样的事情可能吗:
public List<Node> GetNeighbours()
{
// ...
foreach(edge in *BASE*.edges) { ... }
}
我知道我不能使用 base 关键字,因为我不想在这里进行任何继承(为什么节点必须从图形继承?!)并且嵌套类似乎也对我没有帮助(不访问“父母的”字段)。
这段代码现在可以运行,但我觉得它不够优雅,我想体验一下合适的解决方案。
【问题讨论】:
-
您需要传递“父”类本身。
-
@SLaks 所以基本上我需要在
Node类中创建额外的Graph?不可能做到“图表是我的父母,我想要他的边缘”?感谢您的回复。 -
在构造图的时候怎么样,每个节点都会包含一个对连接到它的每条边的引用,而每条边都会对两端的节点有一个引用。你不需要做所有这些。
标签: c# class inheritance inner-classes