如何实现双向类?

时间:2010-10-04 04:43:01

标签: c# .net oop

我有两个课程:单元和用户。

一个Unit类有一个User作为领导者,一个User可以是许多单位的一部分。

class Unit
{
   User Leader;
   public void SetLeader(User leader)
   {
      this.Leader=leader;
   }
}

class User
{
   Unit UnitLed;
   public void LeadUnit(Unit unit)
   {
      this.UnitLed=unit;
      unit.SetLeader(this);
   }
}

我如何强制执行它,以便使用这些类的开发人员不会错误地调用如下代码:

User _user=new User();
Unit _unit=new Unit();
_user.LeadUnit(_unit);
_unit.SetLeader(_user);

但人们以这种方式使用这些类:

_user.LeadUnit(_UNIT)

3 个答案:

答案 0 :(得分:5)

这取决于您部署此代码的方式,但您可以将SetLeader设为内部而非公开,因此程序集之外的任何代码都无法调用它。

答案 1 :(得分:2)

更改您的LeadUnit方法......

class User 
{ 
   Unit UnitLed; 
   public void LeadUnit(Unit unit) 
   { 
      if ( this.UnitLed != unit)
      {
          this.UnitLed=unit; 
          unit.SetLeader(this); 
      }
   } 
} 

您也可以在SetLeader方法中强制执行类似的条件。

答案 2 :(得分:1)

不幸的是.Net无法轻易做到这一点。

但是,您可以通过将类放在第二个项目中,链接到主解决方案,并将SetLeader标记为内部来实现它。