- 此问题在此处已有答案**:
Class inheritance: recreate base class items (or instance) from a property of the inherited class(1个答案)
Why the tuple-type list element's value cannot be modified?(2个答案)
Why a Tuple, or a KeyValueItem, don't have a setter?(4个答案)
Is there any pre-defined class in .net 2.0 to hold a single generic-typed mutable field?(2个答案)
Why should I avoid creating a MutableTuple<T1,T2,TEtc> class in C#?(3个答案)
昨天关门了。
我需要一个类来存储一个可变值。当这个类的一个示例在代码的不同部分之间共享时,其中一个部分更改了该对象中的值,所有其他部分都看到了新值。
这个问题不是我该怎么写,而是给那些想知道答案的人:
public class ValueHolder<T> { public T Value { get; set; } }
我的问题是,这个类存在于标准库中的任何地方吗?这感觉像是它提供的许多小类中会包含的东西。
或者,有没有另一种方法可以实现我所需要的结果,而不用在代码中添加大量的小类?
更新/评论:
我对这个问题引发的负面情绪感到有点惊讶。
"这会导致WTF计数很高!""你在重塑!"
在提出这个问题时,我明确地避免了重新发明。如果标准库中已经有一些东西,我可以使用它,而不是编写一个新类。(只要收益大于成本。)
传递一个对象并允许它被修改的技术一直在使用。你是否曾经写过一个函数,它接受一个List,以便该函数添加/删除值?如果一个事件处理程序(如Form.Closing)允许该事件处理程序通过在event-args对象中设置一个值来改变正在进行的事件,那该函数呢?
在我的例子中,对象只是一个类,里面只有一个bool值,它被传递到另一段代码中,以允许该标志被提升或降低,你可能会说这应该是一个函数的返回值或ref参数,但我使用的框架允许对象传递给处理程序(类似于ParameterizedThreadStart或Tag属性),因此我可以传递的内容有限。
"我想知道标准库是否已经有这样的类。"我想。"让我们来看看吧!"
3条答案
按热度按时间y4ekin9u1#
这是我的
VolatileRef
类。当需要通过引用传递volatile变量时,我使用它。
如果您不关心易变性,只需去掉
volatile
关键字并将类重命名为Ref
即可。lmvvr0a82#
要在项目中的任何位置以及应用生命周期中的任何时间注册和获取对象,我使用Lazy对象:
用于:
您可以在此处找到有关Lazy对象的更多信息:
3zwtqj6y3#
您可以通过这种方式使用Tuple。