Передача контрольных ссылок в качестве параметров ref - PullRequest
0 голосов
/ 25 марта 2010

Пожалуйста, помогите мне здесь, потому что я немного запутался ... У меня есть форма в проекте winforms C # и несколько методов, которые предназначены для выполнения некоторых задач для этой конкретной формы и всех производных, поэтому один из них вспомогательные методы могут послужить примером .. этот должен заполнить комбинированные списки набором данных. Теперь он работает нормально, но когда я закодировал метод с этой подписью

protected void FillComboBox(kComboBox target, IEntClass_DA entity)
        {
            target.DataSource = entity.GetList().Tables[0];
            target.DisplayMember = "name";
            target.ValueMember = "id";
        }

Я увидел, что displayMember и ValueMember в выпадающих списках не содержат значения после вызова метода. Я просто подумал, что должен использовать параметры ref, чтобы присвоения не терялись в ссылочных переменных только для чтения.

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

Так что здесь происходит: передача ссылки на элемент управления вспомогательному методу дает мне возможность изменять его элементы, даже если не используется параметр ref ??

Спасибо.

Ответы [ 2 ]

6 голосов
/ 25 марта 2010

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

См. мою статью о передаче параметров для получения более подробной информации об этой часто неправильно понимаемой области.

2 голосов
/ 25 марта 2010

Вы передаете ссылочный тип, поэтому результат должен быть одинаковым независимо от того, используете вы ref или нет ...

...