Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как избежать циклических ссылок


Автор: MyName 11.4.2005, 13:38
У меня такая ситуация:
Есть класс, который вызывает форму для своего редактирования, на форме содержатся контролы, которые ссылаются на этот класс.
При этом выдается ошибка типа "Циклические ссылки не поддерживаются".
Народ, помогите, плиз...

Автор: arilou 11.4.2005, 14:37
Вы, наверное, имеете ввиду циклические ссылки между проектами? Т.е. в одом проекте у Вас класс ссылающийся на класс формы, определенной в другом проекте.
В таком случае необходимо создать третий проект, на который будут ссылаться оба текущих проекта. В этот проект можно поместить определение интерфейса, которому должно соответствовать форма. Например:

Проект MyApp.Common
Код

public interface IMyClassDataProvider
{
  string GetStringData();
}


Проект MyApp.Classes. Ссылается на MyApp.Common
Код

public class MyClass
{
  // этому методу нужны данные из формы
  public void processFormData(IMyClassDataProvider form)
  {
    string neededData = form.GetStringData();
    // делаем, то что нужно со строкой
  }
}


Проект MyApp.GUI. Ссылается на MyApp.Classes и MyApp.Common

Код

public class Form1 : Form, IMyClassDataProvider
{
  // всякие объявления 
  // ...............

  // метод, вызывающий член класса MyClass
  void doSomething()
  {
     MyClass processor = new MyClass();
     // вызываем метод класса для обработки данных
     // и передаем ему ссылку на текущую форму, приведенную к виду
     // общего интерфейса
     processor.processFormData((IMyClassDataProvider)this);
  }

  public string GetStringData()
  {
     return "this data comes from the implemented interface member";
  }
}


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

P.S. Предлагаю Вам зарегестрироваться и стать полноправным участником нашего форума.

Автор: mr.DUDA 11.4.2005, 14:38
Цитата(MyName @ 11.4.2005, 13:38)
Есть класс, который вызывает форму для своего редактирования, на форме содержатся контролы, которые ссылаются на этот класс.
При этом выдается ошибка типа "Циклические ссылки не поддерживаются".

Не знаю, как другие, а я ничего не понял.
Какой класс ? Визуальный компонент ? Какая форма ? Откуда вызывается, из студии что ли, для визуального редактирования в design-time ? А если нет, то может быть речь идёт о PropertyGrid, в который запихивается объект класса ?

Автор: MyName 11.4.2005, 15:29
Спасибо :О)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)