Ссылка на value type
От: ADemiurg  
Дата: 23.01.06 09:06
Оценка:
Как получить нормальную ссылку на value type переменную?
Нужно написать класс, который отслеживает состояние переменных, разбросанных по всему проекту для записи ТЕКУЩЕГО знаения этих переменных в файл в определенные моменты времени. Необходим метод, в который каким либо образом указывается эта переменная. По ByRef — с классами, как типами переменных, проблем нет, а с Integer, String, etc передается не совсем ссылка, т.к. они value-type.
Re: Ссылка на value type
От: Mab Россия http://shade.msu.ru/~mab
Дата: 23.01.06 09:10
Оценка:
Здравствуйте, ADemiurg, Вы писали:

AD>Как получить нормальную ссылку на value type переменную?

В общем случае никак. Можно получить managed reference, но его нельзя потом будет сохранить (все managed references лежат на стеке, поэтому не возникает проблем со временем жизни).

AD>По ByRef — с классами, как типами переменных, проблем нет, а с Integer, String, etc передается не совсем ссылка, т.к. они value-type.

Ну вот про String это Вы совершенно зря. Это ref-type. Другое дело, что он immutable, так что получить на него "ссылку" в требуемом смысле не получится.

Проблему можно решить, если написать классы-раперы для переменных. Но это уже изменение в дизайне.
Re: Ссылка на value type
От: boriq Россия  
Дата: 23.01.06 09:31
Оценка:
Здравствуйте, ADemiurg, Вы писали:

AD>Как получить нормальную ссылку на value type переменную?

AD>Нужно написать класс, который отслеживает состояние переменных, разбросанных по всему проекту для записи ТЕКУЩЕГО знаения этих переменных в файл в определенные моменты времени. Необходим метод, в который каким либо образом указывается эта переменная. По ByRef — с классами, как типами переменных, проблем нет, а с Integer, String, etc передается не совсем ссылка, т.к. они value-type.

так а чем не нравится:
void method (ref int parameter) ?

ref как раз и служит для того, чтобы передавать параметр по ссылке, а не значением.
Re[2]: Ссылка на value type
От: Mab Россия http://shade.msu.ru/~mab
Дата: 23.01.06 09:35
Оценка:
Здравствуйте, boriq, Вы писали:

B>так а чем не нравится:

B>void method (ref int parameter) ?

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

Этот ref невозможно будет сохранить. А автору вопроса вроде как нужно было именно это.
Re[3]: Ссылка на value type
От: Аноним  
Дата: 23.01.06 09:39
Оценка:
Mab>Этот ref невозможно будет сохранить. А автору вопроса вроде как нужно было именно это.

К сожалению, задача имеено такая
Re[2]: Ссылка на value type
От: Аноним  
Дата: 23.01.06 09:48
Оценка:
Mab>Ну вот про String это Вы совершенно зря.

Погорячился

Mab>Проблему можно решить, если написать классы-раперы для переменных.


Если бы можно было просто заменить Integer (к примеру) на myInteger, это было бы здорово. Но, к сожалению, написать dim a as myInteger = 3 я не смогу.
Re[4]: Ссылка на value type
От: Mab Россия http://shade.msu.ru/~mab
Дата: 23.01.06 09:48
Оценка:
Здравствуйте, Аноним, Вы писали:

Mab>>Этот ref невозможно будет сохранить. А автору вопроса вроде как нужно было именно это.


А>К сожалению, задача имеено такая

Поясню, почему в такой постановке она в принципе не решается.
void Bar()
{
  // вызываем Foo и регистируем локальную переменную
  Foo();
  // вышли из Foo, куда теперь указывает наша ссылка? стек-то развернут
}

void Foo()
{
   int var = 123;
   Logger.RegisterVariable(ref var); // или что-то в этом духе
  ... 
}

Таких проблем (висячие ссылки) managed environment допускать не может.
Re[3]: Ссылка на value type
От: Mab Россия http://shade.msu.ru/~mab
Дата: 23.01.06 09:51
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Если бы можно было просто заменить Integer (к примеру) на myInteger, это было бы здорово. Но, к сожалению, написать dim a as myInteger = 3 я не смогу.
Это VB.NET...? Боюсь, я его совсем не знаю. В принципе на C# можно изготовить класс-оболочку и переопределить для нее operation implicit, так что поведение во многом будет походить на обычный int. Но не во всем конечно.

Альтернативное предложение -- отказаться от этой идеи вовсе и пересмотреть дизайн.
Re[4]: Ссылка на value type
От: Аноним  
Дата: 23.01.06 10:39
Оценка:
Mab>... — отказаться от этой идеи вовсе и пересмотреть дизайн.

Идея была такой: нужен класс , реализующий работу с Ini файлом. Для удобства работы хотелось бы один раз помещать отслеживаемую переменную в коллекцию, чтобы writeIni, readIni etc автоматически отслеживали, куда (откуда) и что писать (читать). А в стандартном решении — на writeIni придется перечислять все отслеживаемые переменные, на ReadIni — аналогично. Может быть, есть альтернатива?
Re[5]: Ссылка на value type
От: Mab Россия http://shade.msu.ru/~mab
Дата: 23.01.06 10:41
Оценка:
А>Может быть, есть альтернатива?
Да сколько угодно.

1. Xml-сериализация
2. System.Configuration

Вообще настройки часто жалательно иметь в одном месте, а не чтобы они расползались по всему коду.
Re[6]: Ссылка на value type
От: Аноним  
Дата: 23.01.06 10:56
Оценка:
Возможно, некорректно поставил вопрос (может быть, не понял ответ ).
Где-то в проге есть переменная А
В одном месте я (теоретически) пишу: cIni.SetReference(А, ....),
т.е. говорю своему классу, что А — отслеживаемая переменная
В какой-либо момент времени вызывается cIni.WriteAll(), и записываются текущие значения всех переменных, загнанных через SetReference, в ini (или xml — не важно) файл
XML-сериализация позволит это каким-нить образом реализовать такой WriteAll?
Re[7]: Ссылка на value type
От: Mab Россия http://shade.msu.ru/~mab
Дата: 23.01.06 10:58
Оценка: 22 (1)
Здравствуйте, Аноним, Вы писали:

А>XML-сериализация позволит это каким-нить образом реализовать такой WriteAll?

Нет, не позволит. Еще раз повторю -- лучше пересмотреть дизайн и захотеть чего-нибудь более правильного.
Re[8]: Ссылка на value type
От: Аноним  
Дата: 23.01.06 11:10
Оценка:
Будем думать. Thanks за ответы
Ссылка на value type
От: Аноним  
Дата: 23.01.06 09:16
Оценка:
Ну во-первых string — reference type, а во-вторых что вас не устраивает в том, что структуры копируются при передаче?
Deny everything...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.