2011-09-08 3 views
0

Использование C#Два экземпляра интерфейса могут ссылаться друг на друга?

Interface A, 
Interface B, 

Class AA:A 
{ 

public AA(A a) 
{ 
//... 
} 

} 

Class BB:B 
{ 

public BB(B b) 
{ 
    //... 
} 

} 

являются код работает нормально и не вызывает проблему циклических ссылок?

+0

Это, похоже, не имеет ничего общего с интерфейсами. АА мог взять АА. Это будет связанный список с последним элементом, обязательно являющимся нулевым. – usr

ответ

2

Почему бы и нет? Синтаксис в сторону, автомодельные структуры появляются по всему информатике. Рассмотрим двоичное дерево: каждый узел имеет ссылку на два других дерева (представленные их корневыми узлами). Типичным способом создания такого дерева является тип, который построен не с одной, а с двумя ссылками на другие экземпляры этого типа.

В более общем смысле, циклы в системетипа не являются такими же, как циклы в графа объектов. Обычно первый по дизайну, но второй способ превратиться в ошибки.

+0

Не могли бы вы подробнее рассказать о том, почему циклы графиков объектов могут в общем случае превращаться в ошибки? Конечно, циклы действительно вызывают проблемы в конкретных случаях, таких как сериализация, но в целом они происходят часто, иногда даже в качестве частей шаблонов проектирования (для обозначения MVP/MVVM). –

+0

Только потому, что (по моему опыту) они неожиданны. Наивно пройдя такой цикл с (скажем), рекурсивная функция привела бы к бесконечному спуску. – phs

+0

Однако, если вы сами пишете код, который может встретить цикл в графе объектов, здесь [алгоритмы обнаружения циклов] (http://en.wikipedia.org/wiki/Cycle_detection). –

Смежные вопросы