![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| nostromo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 23.3.2006 Репутация: нет Всего: 10 |
Глупый вопрос, нужно тип превратить в объект, но что-то не соображу.
Есть несколько переменных типа int (поля объекта). Хочу ввести локальную переменную, которая являлась бы ссылкой на некоторое из этих полей, т.е. так чтобы изменяя эту переменную, изменялось бы и значение поля. |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Напрямую сделать не получится, но можно, извратившись написать что-то вроде:
и дальше, чтобы присвоить значение 123 полю field1 объекта твоего класса
Что-то ничего другого в голову не приходит. Это сообщение отредактировал(а) Дрон - 30.6.2006, 15:24 -------------------- Да. Именно так. |
||||
|
|||||
| nostromo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 23.3.2006 Репутация: нет Всего: 10 |
Спасибо, в принципе годится.
Подозреваю, что выражения вида
выполняется медленно по сравнению с операцией получения ссылки в MC++. Или я не прав? В моем случае особая скорость не нужна, но все же интересно. |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
int - это value тип, поэтому ссылку на него сделать нельзя. наиболее примемлемый способ - описать событие, которое будет генериться при изменении св-ва, инкапсулирующего поле, и в обработчике синхронизроваться. |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Не знаю. Но обрати внимание, что получение FieldInfo достаточно сделать один раз -- оно ведь не привязано к конкретному объекту, а только к типу. -------------------- Да. Именно так. |
|||
|
||||
| nostromo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 23.3.2006 Репутация: нет Всего: 10 |
Забавно, если бы поле не было value-типом, то проблем с работой с ним по ссылке не возникло бы. Учитывая, что выбор типа для поля определяется предметной областью, логично было бы ожидать более легкого превращения value-поля в object-поле. Ан нет... Еще вопрос, а если мне захочется получить ссылку на свойство, что тогда делать? |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Погоди, ты поясни, в чем там у тебя дело. Что мешает вместо
использовать ? |
|||
|
||||
| nostromo |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 23.3.2006 Репутация: нет Всего: 10 |
Согласен, однако в процессе парсинга файла, мне, исходя из контекста приходится определять, в какое поле писать. Тогда либо выносить FieldInfo field1 из локальных переменных метода в переменные класса, либо каждый раз делать инициализацию в рантайме. Теоретически, помешать вычислить значение typeof(MyClass1).GetField("field1"); (аргумент --- константная строка) на этапе компиляции может лишь гипотетическая возможность изменения кода в процессе исполнения. Или я не прав? Добавлено @ 16:08
Я делаю парсинг структурированного текстового файла (не XML) и заполняю поля соответствующих объектов, при этом, грубо говоря, я сначала читаю название поля, а затем его содержимое. Поэтому я не хочу писать отдельную функцию для каждого поля. |
||||
|
|||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
задачка напоминает мне вот эту (моя старая статья): http://www.gotdotnet.ru/LearnDotNet/NETFramework/81257.aspx может пригодится. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |