Мне нужен класс для хранения изменчивого значения. Когда экземпляр этого класса разделяется между разными частями кода, а одна часть изменяет значение внутри этого объекта, все остальные части видят новое значение.Имеет ли стандартная библиотека C# общий класс для хранения изменяемого значения?
Этот вопрос не так, как я мог бы его написать. Здесь он предназначен для тех, кто ищет:
public class ValueHolder<T> { public T Value { get; set; } }
Мой вопрос в том, что этот класс существует в любом месте стандартной библиотеки? Это похоже на то, что будет включено во многие небольшие классы, которые он предоставляет.
Или, есть ли другой способ, я мог бы достичь своего требуемого результата, не засоряя свой код небольшими классами?
Обновление/комментарии:
Я немного удивлен количеством отрицательности, которое поднял этот вопрос.
«Это приводит к большому количеству WTF!» «Вы изобретаете!»
Переосмысление было чем-то, что я явно хотел избежать, задавая этот вопрос. Если в стандартной библиотеке уже есть что-то, я мог бы использовать это вместо написания нового класса. (Пока выгоды перевешивают издержки.)
Техника, передающая объект и позволяющая его изменять, используется все время. Вы когда-нибудь писали функцию, которая принимает список, чтобы эта функция добавляла/удаляла значения? Как насчет обработчика событий (например, Form.Closing), который позволяет обработчику события изменять текущее событие, задавая значение внутри объекта event-args?
В моем случае объект был просто классом с одним значением bool в нем. Он передается в другой фрагмент кода, чтобы этот флаг мог быть поднят или опущен. Вы можете сказать, что это должно быть возвращаемое значение функции или параметр ref, но я использую фреймворк, который позволяет передавать объекты для обработчиков (аналогично параметризуемымThreadStart или свойствам Tag), поэтому я ограничен в том, что я может пройти.
«Интересно, есть ли в стандартной библиотеке класс, который это делает». Я подумал про себя. "Давай выясним!"
Почему бы не просто поставить ссылку на 'value' в классе, в который вы собираетесь поместить ссылку на' ValueHolder'? –
@MatthewWatson Почему бы и нет. Я думаю, мои преподаватели были довольно успешны в обучении меня тому, что вам всегда нужно предоставлять аксессуры, а не разрешать публичный доступ к ценностям. – billpg
Ну, очевидно, вы бы предоставили getter и setter для доступа к значению из класса, как и в 'ValueHolder'. Поэтому мой вопрос остается: Какое преимущество дает вам дополнительный класс ValueHolder? Почему 'myInstance.MyValueHolder.MyValue =" value ";' лучше, чем 'myInstance.MyValue =" value ";'? Это потому, что для типов значений, а не для ссылочных типов? –