C# 交叉引用多个对象

C# 交叉引用多个对象,c#,.net-2.0,C#,.net 2.0,好的,所以我很难想出一个“好”的方法来做以下事情: 将4个对象分组,这样,如果我选择对象A,我就可以轻松且无需通过对象B和C来确定对象D是否与对象A以及任何其他引用组合相关 我目前正在使用SortedList将A链接到B,B链接到C,C链接到D,并且在交叉引用它们时做了一项非常草率的工作。这是可行的,但它真的,真的很难看。我不喜欢难看的代码,除非没有其他方法 我正在考虑使用一个类来存储对象。但引用它们的最佳方式是什么 提前谢谢 更多信息: 对象是窗体上的控件。这4个不同的控件都相互关联,因为它

好的,所以我很难想出一个“好”的方法来做以下事情:

将4个对象分组,这样,如果我选择对象A,我就可以轻松且无需通过对象B和C来确定对象D是否与对象A以及任何其他引用组合相关

我目前正在使用SortedList将A链接到B,B链接到C,C链接到D,并且在交叉引用它们时做了一项非常草率的工作。这是可行的,但它真的,真的很难看。我不喜欢难看的代码,除非没有其他方法

我正在考虑使用一个类来存储对象。但引用它们的最佳方式是什么

提前谢谢


更多信息:

对象是窗体上的控件。这4个不同的控件都相互关联,因为它们对应于用于配置的相同设置。表单上有多个可修改的设置,每个设置使用4个控件

我需要一种无需调用Setting4ControlB.Checked或Setting2ControlD.text即可轻松引用它们的方法,这样就可以创建链接列表。为了重用代码,我对某些控件使用泛型事件,它们都做相同的事情,只是它们引用不同的对象

丑陋的部分是第一,设置链接,第二,从A到D或C到A的引用,等等。我希望能够做到这样:

GetSettingControls(参考控件)。ControlA.Checked


ReferencengControl将是事件中的发送方,ControlA是与ReferencengControl相关的控件。

您可以使用通用字典类指定对象之间的键/值对

这将允许您基于另一个对象查找对象

System.Collections.Generic.Dictionary<object, object> myDictionary = new Dictionary<object, object>();
myDictionary.Add(objectA, objectD);
myDictionary.Add(objectD, objectA);
System.Collections.Generic.Dictionary myDictionary=新字典();
添加(objectA,objectD);
添加(objectD,objectA);

可以使用泛型字典类指定对象之间的键/值对

这将允许您基于另一个对象查找对象

System.Collections.Generic.Dictionary<object, object> myDictionary = new Dictionary<object, object>();
myDictionary.Add(objectA, objectD);
myDictionary.Add(objectD, objectA);
System.Collections.Generic.Dictionary myDictionary=新字典();
添加(objectA,objectD);
添加(objectD,objectA);

我认为不检查对象B和C不是一个好主意。您的对象应该只知道它的直接连接,然后从那里,您可以基于整个对象图处理关系

您应该能够轻松找到基本图形处理的算法

我不明白你为什么要用分类列表。连接是否存储在对象的外部


无论如何,您应该能够通过存储包含从一个对象到另一个对象的直接连接的IEnumerabe(数组或任何东西)轻松地完成这项工作。您只需递归地处理对象(您不必以这种方式实现它,但在精神上,这就是您要做的),直到找到从一个对象到另一个对象的路径。您只需要存储已经采用的路径,这样您就不会发现自己正在处理循环引用。

我认为不通过对象B和C不是一个好主意。您的对象应该只知道它是直接连接,然后从那里,您可以基于整个对象图处理关系

您应该能够轻松找到基本图形处理的算法

我不明白你为什么要用分类列表。连接是否存储在对象的外部


无论如何,您应该能够通过存储包含从一个对象到另一个对象的直接连接的IEnumerabe(数组或任何东西)轻松地完成这项工作。您只需递归地处理对象(您不必以这种方式实现它,但在精神上,这就是您要做的),直到找到从一个对象到另一个对象的路径。您只需要存储已经采用的路径,这样您就不会发现自己正在处理循环引用。

根据您试图表示的关系类型,可能会有非常好的实现/算法。例如,如果关系确定等价类,则可以使用类似的方法确定两个元素是否属于同一类。

根据您试图表示的关系类型,可能会有非常好的实现/算法。例如,如果关系确定等价类,您可以使用类似的方法来确定两个元素是否属于同一类。

首先,如果您具有类似于a->B->C->D的关系,则查看a是否与D相关的唯一方法是从a一直到D。您可以应用一些技巧

这将涉及手动跟踪程序中存在的每个间接引用,也就是说,您将负责以友好的方式添加A->D引用,这可能对某些逻辑有用,例如能够在游戏中“携带”对象

您需要使用weakreference字典,这样就不会通过引用使对象保持活动状态

public class MyObject
{
  public List<WeakReference> References = new List<WeakReference>();

  // My Class Properties and Methods
}

MyObject obj = new MyObject();
obj.refence.Add(new WeakReference(gun));

这只是一个例子,你知道,实现好的访问器、属性等等…

首先,如果你有一个像a->B->C->D这样的关系,唯一能看到a是否与D相关的方法就是从a一直到D。你可以应用一些技巧

这将涉及手动跟踪程序中存在的每个间接引用,也就是说,您将负责以友好的方式添加A->D引用,这可能对某些逻辑有用,例如能够在游戏中“携带”对象

您需要使用weakreference字典,这样就不会通过引用使对象保持活动状态

public class MyObject
{
  public List<WeakReference> References = new List<WeakReference>();

  // My Class Properties and Methods
}

MyObject obj = new MyObject();
obj.refence.Add(new WeakReference(gun));

这只是一个例子,你知道,实现好的访问器、属性等等…

这非常接近我想要的。。。我可能会使用类似的东西。这是非常接近我想要的。。。我可能会使用类似于