C#应该有一个懒惰的关键字来使懒惰初始化更容易吗?
例如.
public lazy string LazyInitializeString = GetStringFromDatabase();
代替
private string _backingField; public string LazyInitializeString { get { if (_backingField == null) _backingField = GetStringFromDatabase(); return _backingField; } }
解决方法
我不知道一个关键字,但它现在有一个
System.Lazy<T>
类型.
>它正式成为.Net Framework 4.0的一部分.
>它允许延迟加载成员的值.
>它支持一个lambda表达式或一个方法来提供一个值.
例:
public class ClassWithLazyMember { Lazy<String> lazySource; public String LazyValue { get { if (lazySource == null) { lazySource = new Lazy<String>(GetStringFromDatabase); // Same as lazySource = new Lazy<String>(() => "Hello,Lazy World!"); // or lazySource = new Lazy<String>(() => GetStringFromDatabase()); } return lazySource.Value; } } public String GetStringFromDatabase() { return "Hello,Lazy World!"; } }
测试:
var obj = new ClassWithLazyMember(); MessageBox.Show(obj.LazyValue); // Calls GetStringFromDatabase() MessageBox.Show(obj.LazyValue); // Does not call GetStringFromDatabase()
在上面的测试代码中,GetStringFromDatabase()只被调用一次.我认为这是你想要的.
编辑:
在收到@dthorpe和@Joe的评论之后,我可以说是以下是最短的:
public class ClassWithLazyMember { Lazy<String> lazySource; public String LazyValue { get { return lazySource.Value; } } public ClassWithLazyMember() { lazySource = new Lazy<String>(GetStringFromDatabase); } public String GetStringFromDatabase() { return "Hello,Lazy World!"; } }
因为以下不编译:
public Lazy<String> LazyInitializeString = new Lazy<String>(() => { return GetStringFromDatabase(); });
而该属性是Lazy< String>的类型.不是字符串.你总是需要使用LazyInitializeString.Value访问它的值.
而且,我开放的建议如何缩短.
原文地址:https://www.jb51.cc/csharp/94974.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。