我正在寻找是否有优雅的方法来确保在第一次访问属性时设置关联的支持字段。例如,我最终使用以下代码范例来解决这个问题:
private Address _address;
public Address Address
{
get
{
if (_address == null)
{
_address = GetAddress();
}return _address;
}
}
最佳答案
除非容易出错或耗时,否则我建议在构造函数中填充属性。否则,我建议使用 Lazy<T>
这样做,为了线程安全:
public class MyClass
{
private Address _address;
public MyClass()
{
_address = GetAddress();
}
public Address Address {get {return _address;}}
}
使用 Lazy<T>
:
public class MyClass
{
private Lazy<Address> _address;
public MyClass()
{
_address = new Lazy<Address>(() => GetAddress());
}
public Address Address {get {return _address.Value;}}
}
从 c#6 开始,你可以有一个像这样的自动实现的属性,但是你必须制作 GetAddress()
方法 static
:
public Address Addgress {get;} = GetAddress();
这将转化为类似于我展示的第一个选项 - See SharpLab demo.
关于c# - 第一次访问属性时的编码风格和支持字段成员为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49251821/