2010-12-29 5 views
2

Эй! Я сделал небольшую систему котла, которая полностью контролируется формой. Компоненты формы, однако, вызывают функции в классе для котла, радиаторов и т. Д.Объект пройдя по ссылке

У меня есть небольшой основной класс, который создает все классы, но я изо всех сил пытаюсь понять, как передать объект формы этим классам, чтобы они могли получить доступ к компонентам формы.

Я думаю, я должен использовать методы mutator в каждом классе для хранения объекта формы? Как я могу это сделать синтаксически правильно?

Спасибо! ; o)

+0

Если это не синтаксически правильно, оно не будет компилироваться. Вы имели в виду использовать какое-то другое прилагательное, подобное стилистике? –

ответ

1

Просто передайте форму каждому class. Храните его в частной переменной, чтобы класс мог использовать его позже. По умолчанию он передается по ссылке.

class Boiler { 
    private Form parentForm; 
    public Boiler(Form f) { 
     parentForm = f; 
    } 
} 
+0

Возможно, вы захотите добавить определенный тип формы, например. private OvenForm parentForm; Lazlo

+2

Просто быть придирчивым - копия * ссылки передается по значению. Существует тонкая (но важная) разница. –

+0

Спасибо большое. Теперь он работает! ; o) –

1

Когда вы передаете ссылочный тип методу, C# (по умолчанию) передаст копию ссылки на метод. Это означает, что если передать ссылку, которую вы имеете в своих классах, вы даете методу копию этой ссылки, и поскольку оба экземпляра ссылаются на один и тот же объект, и сайт вызова, и метод будут иметь доступ к одному экземпляру.

Например:

class Example 
{ 
    static void Main() 
    { 
     string s = "hello, world"; 
     // Here we are passing a copy of the reference 
     // stored in "s" to "Print" 
     Print(s); 
    } 
    static void Print(string str) 
    { 
     // By default, "str" will be assigned the copy of the 
     // reference passed to this method. 
     Console.WriteLine(s); 
    } 
} 

Я хотел бы быть осторожным создания приложения, в котором ваши объекты домена (в вашем случае, Boiler, Radiator и т.д.) знать о слое UI, который потребляет их. Если вы обнаружите, что вам нужно передать Form на одну из этих моделей домена, вы, вероятно, что-то не так. Если вы покажете нам небольшой пример того, что вы пытаетесь выполнить, мы сможем помочь вам придумать более удобное решение.

+0

Хм хорошо, есть довольно много кода, но концептуально форма имеет нагрузку кнопок, таймера и т. д., а кнопки вызова методов в классах, таких как «нажмите кнопку a на радиаторе, часть формы, чтобы bleed(), радиатор "или" нажмите кнопку x на котле, чтобы переключить Off(), система ", если это имеет смысл? Как вы это сделаете, если это не поддерживаемое решение OO? –

+0

То, что вы описали, отлично звучит для меня. Однако неясно, почему вам нужно передать форму на любой из этих объектов. –

+0

Хм хорошо, это случай Boiler.bleed(); метод сброса таймеров и индикаторов выполнения и изменение текста, а что нет. Это хороший способ сделать это? –

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