Передача объекта формы по ссылке - PullRequest
2 голосов
/ 30 декабря 2010

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

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

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

Спасибо!; О)

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Когда вы передаете ссылочный тип методу, 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 и т. Д.) Знают о слое пользовательского интерфейса, который их потребляет.Если вы обнаружите, что вам нужно передать Form одной из этих моделей домена, вы, вероятно, делаете что-то не так.Если вы покажете нам небольшой пример того, чего вы пытаетесь достичь, мы могли бы помочь вам найти более приемлемое решение.

1 голос
/ 30 декабря 2010

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

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