欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c#3.0實(shí)現(xiàn)延遲賦值示例

 更新時(shí)間:2014年01月22日 15:11:25   作者:  
這篇文章主要介紹了c#3.0實(shí)現(xiàn)延遲賦值示例,大家參考使用吧

延遲賦值主要有兩點(diǎn):

1.一個(gè)參數(shù)可能或可能沒(méi)被賦值.

2.一個(gè)參數(shù)在一個(gè)函數(shù)中每次使用時(shí)可能被賦值.

如下面的這種情況:

復(fù)制代碼 代碼如下:

int Add(int x, int y)
{
    return (2 + 1) + (1);
}

使用Func<T>,我們輕松實(shí)現(xiàn),看代碼:

復(fù)制代碼 代碼如下:

/// <summary>
/// LazyExpression
/// </summary>
/// <typeparam name="T">T</typeparam>
public class LazyExpression<T>
{
    Func<T> thunk;
    public LazyExpression(Func<T> Thunk)
    {
        thunk = Thunk;
    }
    public T Evaluate()
    {
        return thunk();
    }
}

/// <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;
    }
}

LazyExpression<T>類(lèi)實(shí)現(xiàn)了基本的延遲賦值,LazyMemoizedExpression<T>類(lèi)實(shí)現(xiàn)了一次賦值,多次使用.
LazyBoolExpression實(shí)現(xiàn)邏輯表達(dá)式.

看UnitTest,一切就明白了

復(fù)制代碼 代碼如下:

///<summary>
///Laziestheexpressiontest.
///</summary>
[TestCase]
publicvoidLazyExpressionTest()
{
varlme1=newLazyExpression<int>(()=>2+1);
varlme2=newLazyExpression<int>(()=>1);
Assert.AreEqual(4,Add(lme1,lme2));
}

///<summary>
///Addsthespecifiedx.
///</summary>
///<paramname="x">Thex.</param>
///<paramname="y">They.</param>
///<returns>result</returns>
privateintAdd(LazyExpression<int>x,LazyExpression<int>y)
{
returnx.Evaluate()+y.Evaluate();
}

///<summary>
///Laziestheexpressionwithlogic.
///</summary>
[TestCase]
publicvoidLazyExpressionWithLogic()
{
varexp1=newLazyExpression<bool>(()=>true);
varexp2=newLazyExpression<bool>(()=>true||false);
if(LazyBoolExpression.And(exp1,exp2))
{
Console.WriteLine("lazyand");
}
if(LazyBoolExpression.Or(exp1,exp2))
{
Console.WriteLine("lazyor");
}
}

///<summary>
///Laziesthememoizedexpressiontest.
///</summary>
[TestCase]
publicvoidLazyMemoizedExpressionTest()
{
varlme1=newLazyMemoizedExpression<int>(()=>GetIntResult());
Assert.AreEqual(943,lme1.Evaluate());
Assert.AreEqual(943,lme1.Evaluate());
//output:
//1passed,0failed,0skipped,took2.80seconds(NUnit2.5).
}

///<summary>
///Comparestolazyexpressiontest.
///</summary>
[TestCase]
publicvoidCompareToLazyExpressionTest()
{
varlme1=newLazyExpression<int>(()=>GetIntResult());
Assert.AreEqual(943,lme1.Evaluate());
Assert.AreEqual(943,lme1.Evaluate());
//output:
//1passed,0failed,0skipped,took4.80seconds(NUnit2.5).
}

///<summary>
///Getstheintresult.
///</summary>
///<returns></returns>
privateintGetIntResult()
{
//currentthreadsleeptwosecond.
System.Threading.Thread.Sleep(2000);
return943;
}

相關(guān)文章

  • C#中Equality和Identity淺析

    C#中Equality和Identity淺析

    這篇文章主要介紹了C#中Equality和Identity淺析,本文先是講解了Equality和Identity的定義,同時(shí)講解了判斷兩個(gè)對(duì)象等價(jià)性的4種方法,需要的朋友可以參考下
    2014-12-12
  • C# 打印網(wǎng)頁(yè)不顯示頁(yè)眉頁(yè)腳的實(shí)現(xiàn)方法

    C# 打印網(wǎng)頁(yè)不顯示頁(yè)眉頁(yè)腳的實(shí)現(xiàn)方法

    這篇文章主要介紹了C# 打印網(wǎng)頁(yè)不顯示頁(yè)眉頁(yè)腳的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 一文搞懂C# 數(shù)據(jù)類(lèi)型

    一文搞懂C# 數(shù)據(jù)類(lèi)型

    這篇文章主要介紹C# 數(shù)據(jù)類(lèi)型的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 改進(jìn)c# 代碼的五個(gè)技巧(二)

    改進(jìn)c# 代碼的五個(gè)技巧(二)

    這篇文章主要介紹了改進(jìn)c# 代碼的五個(gè)技巧(二),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#枚舉類(lèi)型與結(jié)構(gòu)類(lèi)型實(shí)例解析

    C#枚舉類(lèi)型與結(jié)構(gòu)類(lèi)型實(shí)例解析

    這篇文章主要介紹了C#枚舉類(lèi)型與結(jié)構(gòu)類(lèi)型實(shí)例,需要的朋友可以參考下
    2014-07-07
  • 關(guān)于C#.net winform程序驗(yàn)證moss的集成身份認(rèn)證實(shí)例

    關(guān)于C#.net winform程序驗(yàn)證moss的集成身份認(rèn)證實(shí)例

    因?yàn)榫W(wǎng)站使用的是windows集成認(rèn)證,所以遇到了權(quán)限問(wèn)題,需要輸入密碼。使操作和用戶(hù)體驗(yàn)非常不方便,研究了好久沒(méi)有找到好的方法,最后終于讓我踏破鐵鞋總結(jié)出了下面的方法
    2013-03-03
  • C#遞歸讀取XML菜單數(shù)據(jù)的方法

    C#遞歸讀取XML菜單數(shù)據(jù)的方法

    這篇文章主要介紹了C#遞歸讀取XML菜單數(shù)據(jù)的方法,涉及遞歸的操作技巧與C#窗體的用法,對(duì)于進(jìn)行C#項(xiàng)目開(kāi)發(fā)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • C#簡(jiǎn)單實(shí)現(xiàn)文件上傳功能

    C#簡(jiǎn)單實(shí)現(xiàn)文件上傳功能

    這篇文章主要介紹了C#簡(jiǎn)單實(shí)現(xiàn)文件上傳功能,利用MVC+EF+LigerUI 實(shí)現(xiàn)的upload上傳功能,感興趣的小伙伴們可以參考一下
    2016-03-03
  • C# 調(diào)用WebService的方法

    C# 調(diào)用WebService的方法

    這篇文章主要介紹了C# 調(diào)用WebService的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Unity3D實(shí)現(xiàn)物體旋轉(zhuǎn)縮放移動(dòng)效果

    Unity3D實(shí)現(xiàn)物體旋轉(zhuǎn)縮放移動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)物體旋轉(zhuǎn)縮放移動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02

最新評(píng)論