Чтение строк небольшого кода на C # и что они значат - PullRequest
1 голос
/ 26 апреля 2011

мой вопрос очень прост для тех, кто хорошо знает работу. Как этот код читается построчно, особенно 3 комментария?

private formMain parent = null; //explanation 1
public formChild(formMain parent) //explanation 2
{
    InitializeComponent();
    this.parent = parent; //explanation 3
}

Мои мысли: - объяснение 1: создание ссылочного родителя formMain со значением NULL. Это «ноль», я действительно не знаю, что это значит, я хочу объяснить это. Возможно нулевое значение, потому что оно должно быть инициализировано перед использованием - объяснение 2: передача объекта родительской формы в конструктор дочерней формы? - объяснение 3: this.parent ссылается на закрытый член (который находится в первой строке), а = parent ссылается на член в списке аргументов конструктора?

И в родительской форме есть небольшой код при инициализации дочерней формы, передающей (this) в конструктор для (formMain parent), который, я думаю, передает текущую форму.

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

P.S. Пожалуйста, прокомментируйте, используя этот вид шаблона: - объяснение 1: - объяснение 2: - объяснение 3:

Ответы [ 5 ]

2 голосов
/ 26 апреля 2011
  • объяснение 1: вы создаете переменную с именем parent для хранения чего-либо. «Что-то», которое оно будет содержать, это formMain. Установив для него значение null, вы говорите, что у вас еще нет конкретного formMain, но вы знаете, что в конечном итоге оно должно быть.
  • объяснение 2: вы создаете метод, который создает экземпляр formChild. Этот объект (formChild) зависит от formMain. Несмотря на то, что зависимость имеет то же имя, что и в объяснении 1, они не совпадают (пока нет).
  • объяснение 3: Переданный извне в formMain с именем parent (из объяснения 2) получает присвоение внутренне сохраненному parent из объяснения 1. Теперь остальные методы в объекте, который только что был создан может ссылаться на внешнюю зависимость.

То есть, вы можете использовать этот код примерно так:

//from a formMain type object. 
formChild childForm = new formChild(this);

//from the formChild object
this.parent.Title = "Title of parent being changed from child"
0 голосов
/ 26 апреля 2011

Конструктор для дочерней формы устанавливает ссылку на своего родителя.

По поводу использования «этого».Если бы конструктор содержал присваивание, возникла бы проблема.

parent = parent; //this is circular 

Чтобы сослаться на приватный файл с тем же именем (за пределами конструктора), префикс «this»:

this.parent = parent; //assign the value of the param to the private field

Другие комментарии.Кажется, стиль заимствован из Java и не является типичным для C #.

class FormChild
{

    private FormParent _parent; //reference types are automatically null

    public FormChild( FormParent parent)//pass in the reference to the parent
    {
       InitializeComponent();
       _parent = parent; //assign the reference param to the private field.
    }

}
0 голосов
/ 26 апреля 2011

Объяснение № 2 правильное (и № 3 тоже довольно близко).

Дочерняя форма сохраняет ссылку на своего родителя, присваивая ее закрытой переменной-члену. Основная причина, по которой вы хотите сохранить ссылку, - это обратная связь с родителем или доступ к общедоступным свойствам или функциям обратно в родительской форме.

0 голосов
/ 26 апреля 2011

1: Инициализация переменных или объектов никогда не является плохой идеей.Если вы не знаете, что начальные значения, которые вы хотите, чтобы переменные имели null, обычно являются лучшим выбором (альтернативой в большинстве случаев является использование некоторого случайного значения, о котором вы ничего не знаете).
2: эта строка объявляет функцию / метод, которыйпринимает один параметр типа formMain.В этом случае он называется parent.
3: эта строка устанавливает закрытый элемент parent равным параметру parent, переданному в функцию.Ключевое слово this представляет элементы, содержащиеся в классе.

Более простое для понимания переписывание может выглядеть следующим образом:

private formMain parent = null; //explanation 1
public formChild(formMain element) //explanation 2
{
    InitializeComponent();
    this.parent = element; //explanation 3
}
0 голосов
/ 26 апреля 2011

Раньше я так комментировал, когда был совсем новичком, но через некоторое время вы безумно это комментируете, а вместо этого объясняете, какова цель функции / части.

IE Вы не делаетенужно объяснить, что вы устанавливаете Partent = null, потому что код уже говорит об этом, вы объясняете, почему вы устанавливаете его в null.

...