【问题标题】:C# How to ensure an automatic double link between two objectsC#如何确保两个对象之间的自动双链接
【发布时间】:2019-03-04 04:57:51
【问题描述】:

目标是确保对象之间的双重链接,即如果我将对象 A 链接到对象 B,那么对象 B 应该自动链接到对象 A。

这种系统的潜在用途之一可能是为无向图建模。

我只是想出了这样一个愚蠢的实现:

class ObjA
{
   public _addLink (object Obj)
   {
      <add code to store the single link to Obj>
   }
   public addLink (object Obj)
   {
      _addLink(Obj);
      Obj._addLink(this);
   }
} 

class ObjB
{
   public _addLink (object Obj)
   {
      <add code to store the single link to Obj>
   }
   public addLink (object Obj)
   {
      _addLink(Obj);
      Obj._addLink(this);
   }
} 

那我可以写了

ObjA.addLink(ObjB)

但问题是在这种情况下我也可以做到

ObjA._addLink(ObjB)

系统中断,即 ObjB 没有获得到 ObjA 的链接。而且我不能将 _addLink 设为私有,因为它不会被其他对象看到。

实现这一目标的最佳方法是什么?

【问题讨论】:

  • 自反链接不模拟单向图,因此您的要求似乎是矛盾的

标签: c# oop object graph linked-list


【解决方案1】:

请注意安静地确定您正在尝试做什么,但是您可以使用基类执行以下操作,即决斗链接,如果需要,可以使用私有范围

public class BaseLink 
{
   private BaseLink Link { get; set; }

   protected virtual void AddLink (BaseLink obj)
   {
      Link = obj;
      Link.AddLink(obj);

   }
}
public class ObjA : BaseLink
{

} 

public class ObjB : BaseLink
{
   public void Add(BaseLink baseLink)
   {
      AddLink(baseLink);
   }
} 

// or

public class ObjB : BaseLink
{
   public ObjB(BaseLink baseLink) => AddLink(baseLink); 
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2023-03-28
    • 2016-10-15
    相关资源
    最近更新 更多