延迟赋值主要有两点:
1.一个参数可能或可能没被赋值.
2.一个参数在一个函数中每次使用时可能被赋值.
如下面的这种情况:
使用Func<T>,我们轻松实现,看代码:
/// <summary>
/// LazyBoolExpression
/// </summary>
public static class LazyBoolExpression
{
public static bool And(LazyExpression<bool> LHS, LazyExpression<bool> RHS)
{
return LHS.Evaluate() && RHS.Evaluate();
}
public static bool Or(LazyExpression<bool> LHS, LazyExpression<bool> RHS)
{
return LHS.Evaluate() == true ? true : RHS.Evaluate();
}
}
/// <summary>
/// LazyMemoizedExpression
/// </summary>
/// <typeparam name=\"T\"></typeparam>
public class LazyMemoizedExpression<T>
{
bool thunked;
T value;
Func<T> thunk;
public LazyMemoizedExpression(Func<T> Thunk)
{
thunked = false;
thunk = Thunk;
}
public T Evaluate()
{
if (!thunked)
{
value = thunk();
thunked = true;
}
return value;
}
}
本文地址:https://www.stayed.cn/item/4220
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我