您的位置: 旅游網(wǎng) > 八卦 >> 粉絲

    新特性探究之模擬泛型和內(nèi)置算法的

    發(fā)布時(shí)間:2021-10-26 07:18:55

    由于預(yù)授權(quán)完成交易需在預(yù)授權(quán)金額115%范圍內(nèi)予以付款承兌 在C#2.0中,匿名方法、IEnumerable接口和匿名方法的合作,使很多的編程任務(wù)變得非常的簡(jiǎn)單,而且寫(xiě)出來(lái)的程序非常的優(yōu)美。

    比如,我們可以寫(xiě)出如下的代碼:

    List<Book> thelib = tbooks();

    List<Book> found = ndAll(delegate(Book curbook)

    {

    if (artsWith(\"...\"))

    return true;

    return false;

    });

    foreach (Book b in found)

    iteLine(bn);

    這段程序非常簡(jiǎn)單的展示給我們需要查找的信息,代碼也非常的直接易懂。內(nèi)置的數(shù)據(jù)結(jié)構(gòu)給了我們強(qiáng)大的算法支持,不過(guò),能不能夠?yàn)樽远x的類(lèi)定義類(lèi)似的算法呢?

    比如,如果我有一個(gè)自定義的Library類(lèi)并沒(méi)有使用List<Book>存儲(chǔ)數(shù)據(jù),而是使用某種自定義的數(shù)據(jù)結(jié)構(gòu),我能不能也讓用戶(hù)使用類(lèi)似的語(yǔ)法,忽略存儲(chǔ)細(xì)節(jié)的使用匿名委托來(lái)實(shí)現(xiàn)特定的算法呢?

    答案當(dāng)然是肯定的,而且在C#中實(shí)現(xiàn)這樣的功能是非常的簡(jiǎn)單。

    首先讓我們看看FindAll中用到的匿名委托的原型

    public delegate bool Predicate<T>(T obj);

    很明顯的,上面的代碼等于注冊(cè)了一個(gè)搜索的回調(diào),而在List內(nèi)部定義了某種遍歷的機(jī)制,從而實(shí)現(xiàn)了一個(gè)漂亮的算法結(jié)構(gòu)Closure。

    看到了這些,我們就可以定義自己的算法結(jié)構(gòu)了,首先,我定義了一個(gè)如下的類(lèi)

    public class MyVec<T>

    {

    public static MyVec<T> operator +(MyVec<T> a, T b)

    {

    a._d(b);

    return a;

    }

    public override string ToString()

    {

    StringBuilder builder = new StringBuilder();

    foreach (T a in _list)

    {

    pend(String());

    pend(\",\");

    }

    string ret = move(ngth - 1, 1).ToString();

    return ret;

    }

    public MyVec<T<>findAll(Predicate<T> act)

    {

    MyVec<T:>t2 = new MyVec<T>();

    foreach(T i in _list)

    {

    if (act(i))

    t2._d(i);

    }

    return t2;

    }

    // this is the inner object

    private List<T> _list = new List<T>();

    }

    這個(gè)類(lèi)中包含了一個(gè)的List<T>結(jié)構(gòu),主要是為了證實(shí)我們的想法是否可行,事實(shí)上,任何一個(gè)可以支持foreach遍歷的結(jié)構(gòu)都可以作為內(nèi)置的數(shù)據(jù)存儲(chǔ)對(duì)象,我們會(huì)在后面的例子中給出一個(gè)更加復(fù)雜的實(shí)現(xiàn)。

    下面是用于測(cè)試這個(gè)實(shí)驗(yàn)類(lèi)的代碼:

    static void Main(string[] args)

    {

    MyVec<int> a = new MyVec<int>();

    a += 12;

    a += 15;

    a += 32;

    MyVec<int> b = ndAll(delegate(int x)

    {

    if (x < 20) return true; return false;

    }

    );

    iteLine(\"vection original\");

    iteLine(String());

    iteLine(\"vection found\");

    iteLine(String());

    adLine();

    }

    編譯,執(zhí)行,程序輸出:

    vection original

    12,15,32

    vection found

    32

    和我們預(yù)期的完全相同。很明顯的,List內(nèi)部的算法與我們預(yù)期的基本相同。

    Predicate<T>僅僅是為了仿照系統(tǒng)的實(shí)現(xiàn)而采用的一個(gè)委托,事實(shí)上可以使用自己定義的任何委托作為回調(diào)的函數(shù)體。

    通過(guò)使用IEnumberable接口,可以實(shí)現(xiàn)對(duì)任意結(jié)構(gòu)的遍歷,從而對(duì)任何數(shù)據(jù)結(jié)構(gòu)定義強(qiáng)大的算法支持。

    查看本文來(lái)源

    急性腸胃炎可以吃什么
    唐山醫(yī)院男科哪家醫(yī)院好
    有傷口吃什么愈合的快
    猜你會(huì)喜歡的
    猜你會(huì)喜歡的
    主站蜘蛛池模板: 波多野结衣中文字幕一区二区三区 | 国产产在线精品亚洲AAVV| 中文字幕最新在线| 爱做久久久久久| 国产国产精品人在线视| h片在线观看免费| 日韩精品第1页| 免费成人在线观看| 日本dhxxxxxdh14日本| 很污很黄能把下面看湿的文字| 人妻少妇AV中文字幕乱码| 黄色黄色一级片| 天天综合日日噜噜噜| 久久精品国产只有精品66| 男女乱婬真视频| 国产在线精品美女观看| GOGOGO免费高清在线中国| 日韩a在线播放| 亚洲精品无码国产片| 色综合色国产热无码一| 国产黄在线观看免费观看不卡| 亚洲AV成人无码网站| 精品久久久久久久无码| 国产手机精品视频| tube欧美69xxxx| 日韩乱码中文字幕视频| 亚洲视频欧洲视频| 里番acg里番龙| 国内揄拍高清国内精品对白| 久久97久久97精品免视看| 欧美日本视频在线观看| 又大又黄又粗又爽的免费视频| 91w乳液78w78wyw5| 成年片色大黄全免费网站久久| 人人人妻人人澡人人爽欧美一区| 亚洲日本人成中文字幕| 好男人在线社区www在线视频一| 亚洲欧洲精品视频在线观看| 色吊丝永久在线观看最新| 国产线视频精品免费观看视频| 久久精品99久久香蕉国产|