我經常發現自己寫了一個懶惰評估的房產。例如:實現一個「LazyProperty」類 - 這是個好主意嗎?
if (backingField == null)
backingField = SomeOperation();
return backingField;
這不是很多代碼,但如果您有很多屬性,它會重複很多次。
我想定義一個名爲LazyProperty類:
public class LazyProperty<T>
{
private readonly Func<T> getter;
public LazyProperty(Func<T> getter)
{
this.getter = getter;
}
private bool loaded = false;
private T propertyValue;
public T Value
{
get
{
if (!loaded)
{
propertyValue = getter();
loaded = true;
}
return propertyValue;
}
}
public static implicit operator T(LazyProperty<T> rhs)
{
return rhs.Value;
}
}
這將使我能夠初始化一個領域是這樣的:
first = new LazyProperty<HeavyObject>(() => new HeavyObject { MyProperty = Value });
然後該財產的身體可以減少到:
public HeavyObject First { get { return first; } }
這將被大多數公司使用,因爲它會進入我們大部分產品共享的通用類庫。
我不能決定這是不是一個好主意。我認爲解決方案有一些優點,如:
- 更少的代碼
- 更漂亮的代碼
不利的一面,這將是很難看的代碼,並確定到底發生了什麼 - 特別是如果開發人員不熟悉LazyProperty類。
您認爲如何?這是一個好主意,還是應該放棄它? 另外,隱式運算符是一個好主意,或者如果您應該使用此類,您是否更願意明確使用Value屬性?
意見和建議,歡迎:-)
你的觀點是關於隱式運算符的。這是我需要意見的事情之一。 – driis 2009-01-13 19:36:42