gpt4 book ai didi

c# - 在 C# 中防止错误使用支持字段的最佳方法

转载 作者:太空狗 更新时间:2023-10-30 00:01:11 25 4
gpt4 key购买 nike

我有一个类 (Foo),它延迟加载一个名为 (Bar) 的属性。防止错误使用(由于智能感知或缺乏经验的员工)未初始化的支持字段的首选方法是什么?

我可以想到 3 个选项:

  class Foo {
// option 1 - Easy to use this.bar by mistake.
string bar;
string Bar {
get {
// logic to lazy load bar
return bar;
}
}

// option 2 - Harder to use this._bar by mistake. It is more obscure.
string _bar2;
string Bar2 {
get {
// logic to lazy load bar2
return _bar2;
}
}

//option 3 - Very hard to use the backing field by mistake.
class BackingFields {
public string bar;
}

BackingFields fields = new BackingFields();

string Bar3 {
get {
// logic to lazy load bar
return fields.bar;
}
}

}

请记住,我唯一希望人们使用支持字段栏的地方是属性的 setter 和 getter。在类里面的其他任何地方,他们都应该始终使用 this.Bar

更新

我目前正在使用 the following Lazy implementation (并非针对所有具有支持字段的属性,而是针对需要延迟加载、同步和通知的特定属性)。它也可以扩展以支持 future (稍后在单独的线程中强制评估)

注意 我的实现在读取时锁定,因为它支持外部集。

此外,我想提一下,我认为这是一个可以在 Ruby for example 中克服的语言限制。 .

您可以 implement lazy以这种方式。

x = lazy do
puts "<<< Evaluating lazy value >>>"
"lazy value"
end

puts x
# <<< Evaluating lazy value >>>
# lazy value

最佳答案

如何使用 ObsoleteAttribute#pragma - 很难错过!

    void Test1()
{
_prop = ""; // warning given
}
public string Prop
{
#pragma warning disable 0618
get { return _prop; }
set { _prop = value; }
#pragma warning restore 0618
}
[Obsolete("This is the backing field for lazy data; do not use!!")]
private string _prop;
void Test2()
{
_prop = ""; // warning given
}

关于c# - 在 C# 中防止错误使用支持字段的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/560549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com