最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

延遲賦值主要有兩點:

1.一個參數(shù)可能或可能沒被賦值.

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

如下面的這種情況:

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

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

使用Func<T>,我們輕松實現(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>類實現(xiàn)了基本的延遲賦值,LazyMemoizedExpression<T>類實現(xiàn)了一次賦值,多次使用.
LazyBoolExpression實現(xiàn)邏輯表達式.

看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# 數(shù)據(jù)驗證Regex示例詳解

    C# 數(shù)據(jù)驗證Regex示例詳解

    文章介紹了C#中使用Regex進行數(shù)據(jù)驗證的方法,包括整數(shù)和小數(shù)的正負驗證,以及郵箱和身份證號的格式驗證,感興趣的朋友一起看看吧
    2025-02-02
  • 簡單介紹C# 中的擴展方法

    簡單介紹C# 中的擴展方法

    這篇文章主要介紹了C# 中的擴展方法的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • C#編程調(diào)用Cards.dll實現(xiàn)圖形化發(fā)牌功能示例

    C#編程調(diào)用Cards.dll實現(xiàn)圖形化發(fā)牌功能示例

    這篇文章主要介紹了C#編程調(diào)用Cards.dll實現(xiàn)圖形化發(fā)牌功能,結(jié)合實例形式分析了C#動態(tài)鏈接庫調(diào)用及圖形操作技巧,需要的朋友可以參考下
    2017-06-06
  • C#實現(xiàn)子窗體與父窗體通信方法實例總結(jié)

    C#實現(xiàn)子窗體與父窗體通信方法實例總結(jié)

    這篇文章主要介紹了C#實現(xiàn)子窗體與父窗體通信方法,實例總結(jié)了常用的四種窗體通信方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • WPF實現(xiàn)圓形進度條的示例代碼

    WPF實現(xiàn)圓形進度條的示例代碼

    這篇文章主要為大家詳細介紹了WPF如何實現(xiàn)圓形的進度條,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-01-01
  • C#中的yield關(guān)鍵字詳解

    C#中的yield關(guān)鍵字詳解

    本文詳細講解了C#中的yield關(guān)鍵字,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C# ManualResetEvent使用方法詳解

    C# ManualResetEvent使用方法詳解

    這篇文章主要為大家詳細介紹了ManualResetEvent使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C# 任務(wù)的異常和延續(xù)處理

    C# 任務(wù)的異常和延續(xù)處理

    本文主要介紹了C# 任務(wù)的異常和延續(xù)處理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • C#使用foreach語句遍歷隊列(Queue)的方法

    C#使用foreach語句遍歷隊列(Queue)的方法

    這篇文章主要介紹了C#使用foreach語句遍歷隊列(Queue)的方法,涉及foreach語句的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C# 常見操作符整理

    C# 常見操作符整理

    操作符接受一個或多個參數(shù),并生成一個新值。操作符其實可以看做一個有返回值方法,但是參數(shù)的形式和調(diào)用和普通的調(diào)用不同。
    2011-02-02

最新評論

山丹县| 博罗县| 正定县| 临西县| 临猗县| 横山县| 江门市| 杨浦区| 乌什县| 桂平市| 乌兰浩特市| 武乡县| 安多县| 哈尔滨市| 杨浦区| 临沧市| 齐河县| 敦化市| 湄潭县| 西乌珠穆沁旗| 鞍山市| 盐津县| 兰考县| 蒙山县| 和平区| 舒城县| 肇庆市| 五指山市| 静海县| 同江市| 衢州市| 鄱阳县| 道孚县| 富民县| 维西| 三河市| 盖州市| 五大连池市| 内乡县| 南丹县| 罗山县|