Как реализовать двунаправленные классы? - PullRequest
1 голос
/ 04 октября 2010

У меня есть два класса: Unit и User.

класс Unit имеет 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);
   }
}

Howw canЯ применяю это так, чтобы разработчик, использующий эти классы, НЕ по ошибке вызывал код, такой как:

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

, но чтобы люди использовали классы следующим образом:

_user.LeadUnit (_unit)

Ответы [ 3 ]

5 голосов
/ 04 октября 2010

Это зависит от того, как вы развертываете этот код, но вы можете сделать SetLeader внутренним, а не общедоступным, поэтому любой код вне вашей сборки не сможет его вызвать.

2 голосов
/ 04 октября 2010

Измените свой метод LeadUnit следующим образом ...

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

Вы также можете применить аналогичные условия в методе SetLeader.

1 голос
/ 04 октября 2010

К сожалению. .Net не может сделать это легко.

Однако этого можно достичь, поместив классы во второй проект, связав его с основным решением, и пометив SetLeader как внутренний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...