2016-08-10 3 views
-1
class A 
{ 
    public B b { get; set; } 
    public void Ma() 
    { 
     b.Mb(); 
    } 
} 

class B 
{ 
    B() 
    { 
     A a = new A(); 
     a.b = this; 
    } 
    public void Mb() 
    { 
    } 
} 

в данном случае, я создаю объект класса А в классе B и прохождения текущего объекта из B в A.
У меня есть 3 вопроса
1. Существует ли циклическая зависимость между двумя классами?
2. Разве это запах дизайна?
3. Если это запах дизайна, как его решить?циклическая зависимость в C#, это дизайнерский запах?

+0

Этот вопрос может быть лучше подходит для [Обзор кода ] (http://codereview.stackexchange.com/), чем здесь, на SO. – bassfader

ответ

1

Я думаю, что большинство проблем лучше решить, избегая циклических зависимостей - если это возможно.

Как A заинтересован только в Mb функции B и не в самом объекте, простое решение для вашей проблемы без циклических зависимостей будет:

class A 
{ 
    public Action BAction { get; set; } 
    public void Ma() 
    { 
     if (BAction != null) 
      BAction(); 
    } 
} 

class B 
{ 
    B() 
    { 
     A a = new A {BAction = Mb}; 
    } 
    public void Mb() 
    { 
    } 
} 
Смежные вопросы