很抱歉,我的头衔很差。我不知道正确的术语,但是如果您可以告知我我的实际要求,则会对其进行编辑。
是否可以像自动属性一样连续执行以下操作?
public class MyClass
{
static OtherClass _otherClass;
static OtherClass otherClass => _otherClass ?? (_otherClass = new OtherClass());
}
答案 0 :(得分:0)
您可以使用Lazy<T>
进行延迟初始化,尽管它不会简化太多代码:
static Lazy<OtherClass> _otherClassLazy = new Lazy<OtherClass>(() => new OtherClass());
static OtherClass otherClass => _otherClassLazy.Value;
Lazy<T>
仅初始化一次值,并且仅在实际访问时初始化。
如果您真的想要一行,可以使用:
static Lazy<OtherClass> otherClass { get; } = new Lazy<OtherClass>(() => new OtherClass());
在代码中引用此变量时,必须付出otherClass.Value
的代价。
如果只想按需初始化属性,而不是在类本身的初始化期间,则此解决方案比{ get; } = new OtherClass()
更可取。如果构造函数要做很多工作并且在某些情况下可能不使用该属性,则这可能是理想的。