中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

背后的故事之 - 快樂(lè)的Lambda表達(dá)式(二)
來(lái)源:易賢網(wǎng) 閱讀:1616 次 日期:2015-04-02 12:15:50
溫馨提示:易賢網(wǎng)小編為您整理了“背后的故事之 - 快樂(lè)的Lambda表達(dá)式(二)”,方便廣大網(wǎng)友查閱!

名單

上一篇 背后的故事之 – 快樂(lè)的Lambda表達(dá)式(一)我們由淺入深的分析了一下Lambda表達(dá)式。知道了它和委托以及普通方法的區(qū)別,并且通過(guò)測(cè)試對(duì)比他們之間的性能,然后我們通過(guò)IL代碼深入了解了Lambda表達(dá)式,以及介紹了如何在.NET中用Lambda表達(dá)式來(lái)實(shí)現(xiàn)JavaScript中流行的一些模式。

今天,我們接著來(lái)看Lambda表達(dá)式在.NET中還有哪些新鮮的玩法。

Lambda表達(dá)式玩轉(zhuǎn)多態(tài)

Lambda如何實(shí)現(xiàn)多態(tài)?我們用抽象類和虛方法了,為什么還要用Lambda這個(gè)玩意?且看下面的代碼:

class MyBaseClass

{

public Action SomeAction { get; protected set; }

public MyBaseClass()

{

SomeAction = () =>

{

//Do something!

};

}

}

class MyInheritedClass : MyBaseClass

{

public MyInheritedClass()

{

SomeAction = () => {

//Do something different!

};

}

}

我們的基類不是抽象類,也沒(méi)有虛方法,但是把屬性通過(guò)委托的方式暴露出來(lái),然后在子類中重新為我們的SomeAction賦予一個(gè)新的表達(dá)式。這就是我們實(shí)現(xiàn)多態(tài)的過(guò)程,當(dāng)然父類中的SomeAction的set有protected的保護(hù)級(jí)別,不然就會(huì)被外部隨易修改了。但是這還不完美,父類的SomeAction在子類中被覆蓋之后,我們徹底訪問(wèn)不到它了,要知道真實(shí)情況是我們可以通過(guò)base來(lái)訪問(wèn)父類原來(lái)的方法的。接下來(lái)就是實(shí)現(xiàn)這個(gè)了

class MyBaseClass

{

public Action SomeAction { get; private set; }

Stack<Action> previousActions;

protected void AddSomeAction(Action newMethod)

{

previousActions.Push(SomeAction);

SomeAction = newMethod;

}

protected void RemoveSomeAction()

{

if(previousActions.Count == 0)

return;

SomeAction = previousActions.Pop();

}

public MyBaseClass()

{

previousActions = new Stack<Action>();

SomeAction = () => {

//Do something!

};

}

}

上面的代碼中,我們通過(guò)AddSomeAction來(lái)實(shí)現(xiàn)覆蓋的同時(shí),將原來(lái)的方法保存在previousActions中。這樣我們就可以保持兩者同時(shí)存在了。

大家知道子類是不能覆蓋父類的靜態(tài)方法的,但是假設(shè)我們想實(shí)現(xiàn)靜態(tài)方法的覆蓋呢?

void Main()

{

var mother = HotDaughter.Activator().Message;

//mother = "I am the mother"

var create = new HotDaughter();

var daughter = HotDaughter.Activator().Message;

//daughter = "I am the daughter"

}

class CoolMother

{

public static Func<CoolMother> Activator { get; protected set; }

//We are only doing this to avoid NULL references!

static CoolMother()

{

Activator = () => new CoolMother();

}

public CoolMother()

{

//Message of every mother

Message = "I am the mother";

}

public string Message { get; protected set; }

}

class HotDaughter : CoolMother

{

public HotDaughter()

{

//Once this constructor has been "touched" we set the Activator ...

Activator = () => new HotDaughter();

//Message of every daughter

Message = "I am the daughter";

}

}

這里還是利用了將Lambda表達(dá)式作為屬性,可以隨時(shí)重新賦值的特點(diǎn)。當(dāng)然這只是一個(gè)簡(jiǎn)單的示例,真實(shí)項(xiàng)目中并不建議大家這么去做。

方法字典

實(shí)際上這個(gè)模式我們?cè)谏弦黄姆祷胤椒ㄖ幸呀?jīng)講到了,只是沒(méi)有這樣一個(gè)名字而已,就算是一個(gè)總結(jié)吧。故事是這樣的,你是不是經(jīng)常會(huì)寫到switch-case語(yǔ)句的時(shí)候覺(jué)得不夠優(yōu)雅?但是你又不想去整個(gè)什么工廠模式或者策略模式,那怎么樣讓你的代碼看起來(lái)高級(jí)一點(diǎn)呢?

public Action GetFinalizer(string input)

{

switch

{

case "random":

return () => { /* ... */ };

case "dynamic":

return () => { /* ... */ };

default:

return () => { /* ... */ };

}

}

//-------------------變身之后-----------------------

Dictionary<string, Action> finalizers;

public void BuildFinalizers()

{

finalizers = new Dictionary<string, Action>();

finalizers.Add("random", () => { /* ... */ });

finalizers.Add("dynamic", () => { /* ... */ });

}

public Action GetFinalizer(string input)

{

if(finalizers.ContainsKey(input))

return finalizers[input];

return () => { /* ... */ };

}

好像看起來(lái)是不一樣了,有那么一點(diǎn)味道。但是一想是所有的方法都要放到那個(gè)BuildFinalizers里面,這種組織方法實(shí)在是難以接受,我們來(lái)學(xué)學(xué)插件開(kāi)發(fā)的方式,讓它自己去找所有我們需要的方法。

static Dictionary<string, Action> finalizers;

// 在靜態(tài)的構(gòu)造函數(shù)用調(diào)用這個(gè)方法

public static void BuildFinalizers()

{

finalizers = new Dictionary<string, Action>();

// 獲得當(dāng)前運(yùn)行程序集下所有的類型

var types = Assembly.GetExecutingAssembly().GetTypes();

foreach(var type in types)

{

// 檢查類型,我們可以提前定義接口或抽象類

if(type.IsSubclassOf(typeof(MyMotherClass)))

{

// 獲得默認(rèn)無(wú)參構(gòu)造函數(shù)

var m = type.GetConstructor(Type.EmptyTypes);

// 調(diào)用這個(gè)默認(rèn)的無(wú)參構(gòu)造函數(shù)

if(m != null)

{

var instance = m.Invoke(null) as MyMotherClass;

var name = type.Name.Remove("Mother");

var method = instance.MyMethod;

finalizers.Add(name, method);

}

}

}

}

public Action GetFinalizer(string input)

{

if(finalizers.ContainsKey(input))

return finalizers[input];

return () => { /* ... */ };

}

如果要實(shí)現(xiàn)插件化的話,我們不光要能夠加載本程序集下的方法,還要能隨時(shí)甚至運(yùn)行時(shí)去加載外部的方法,請(qǐng)繼續(xù)往下看:

internal static void BuildInitialFinalizers()

{

finalizers = new Dictionary<string, Action>();

LoadPlugin(Assembly.GetExecutingAssembly());

}

public static void LoadPlugin(Assembly assembly)

{

var types = assembly.GetTypes();

foreach(var type in types)

{

if(type.IsSubclassOf(typeof(MyMotherClass)))

{

var m = type.GetConstructor(Type.EmptyTypes);

if(m != null)

{

var instance = m.Invoke(null) as MyMotherClass;

var name = type.Name.Remove("Mother");

var method = instance.MyMethod;

finalizers.Add(name, method);

}

}

}

}

現(xiàn)在,我們就可以用這個(gè)方法,給它指定程序集去加載我們需要的東西了。

最后留給大家一個(gè)問(wèn)題,我們能寫遞歸表達(dá)式么?下面的方法如果用表達(dá)式如何寫呢?

int factorial(int n)

{

if(n == 0)

return 1;

else

return n * factorial(n - 1);

}

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看技術(shù)文章
易賢網(wǎng)手機(jī)網(wǎng)站地址:背后的故事之 - 快樂(lè)的Lambda表達(dá)式(二)
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久精品一区二区三区四区| 亚洲精品一区二区三区99| 亚洲欧美清纯在线制服| 99在线精品免费视频九九视| 免费观看久久久4p| 亚洲第一页中文字幕| 亚洲永久免费| 狠狠色狠狠色综合日日五 | 国产深夜精品| 欧美极品一区二区三区| 久久久久久久一区| 一区二区福利| 激情久久中文字幕| 国外成人在线视频网站| 伊人狠狠色j香婷婷综合| 尤物精品国产第一福利三区| 国产精品呻吟| 国一区二区在线观看| 国产视频欧美| 国产伦精品一区二区三区| 欧美日韩一区二区三区四区五区| 欧美国产先锋| 136国产福利精品导航网址| 尤物在线精品| 国产精品夜夜夜一区二区三区尤| 久久av一区二区三区漫画| 麻豆91精品91久久久的内涵| 国产一区视频观看| 欧美日韩中文在线观看| 激情视频亚洲| 久久精品中文字幕免费mv| 国产精品超碰97尤物18| 亚洲午夜日本在线观看| 国产精品av久久久久久麻豆网 | 亚洲人成7777| 久久激情视频| 国产精品国产精品| 亚洲三级色网| 久久电影一区| 国产精品久久久久久久午夜 | 在线一区二区日韩| 在线亚洲免费视频| 欧美14一18处毛片| 国产亚洲一本大道中文在线| 亚洲国产91色在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩中文另类| 亚洲少妇在线| 欧美日一区二区在线观看| 亚洲精品麻豆| 欧美日韩在线一区二区三区| 亚洲欧洲日韩在线| 嫩草伊人久久精品少妇av杨幂| 黄色国产精品一区二区三区| 久久精品视频在线看| 韩日精品视频| 免费久久99精品国产自| 亚洲级视频在线观看免费1级| 久久综合色影院| 国内外成人在线| 亚洲夜间福利| 国产亚洲精品成人av久久ww| 亚洲欧美日韩一区二区三区在线观看| 久热精品视频在线| 在线成人h网| 欧美国产综合视频| 亚洲视频二区| 欧美日韩国产精品自在自线| 亚洲免费福利视频| 国产亚洲精品v| 香蕉尹人综合在线观看| 激情欧美一区| 欧美视频免费在线| 欧美高清视频在线播放| 亚洲男人的天堂在线观看| 欧美不卡在线| 亚洲国产另类久久精品| 巨乳诱惑日韩免费av| 亚洲欧洲综合另类在线| 欧美一区二区视频免费观看| 亚洲国产专区| 亚洲国产精品成人综合色在线婷婷| 国产精品私人影院| 国产九色精品成人porny| 欧美精品一区二区三区高清aⅴ| 欧美劲爆第一页| 亚洲天堂网站在线观看视频| 亚洲高清免费| 欧美日韩国产综合视频在线| 久久在线视频| 久久精品女人| 久久久免费精品| 午夜亚洲福利| 久久精品女人| 久久九九99| 久久久久久久999| 欧美专区在线播放| 一区二区三区视频免费在线观看 | 欧美日韩亚洲视频一区| 欧美成人免费视频| 欧美国产高潮xxxx1819| 美女免费视频一区| 国内精品视频在线观看| 国产网站欧美日韩免费精品在线观看| 美日韩精品免费观看视频| 亚洲婷婷综合久久一本伊一区| 亚洲精品精选| 亚洲欧美日韩一区在线| 欧美在线一二三| 欧美fxxxxxx另类| 国产精品第一区| 激情欧美丁香| 一本色道久久综合狠狠躁篇怎么玩| 中文亚洲视频在线| 免费一级欧美在线大片| 国产精品大全| 亚洲国产成人久久综合| 亚洲永久免费精品| 久久久久久久久久久久久久一区 | 亚洲成人在线网站| 亚洲视频网站在线观看| 欧美一区二区三区免费看| 久久色在线观看| 国产欧美日韩亚洲| 日韩写真在线| 久久婷婷影院| 国产日产欧美精品| 亚洲国产精品v| 亚洲国产精品小视频| 亚洲综合色婷婷| 欧美交受高潮1| 免费在线观看一区二区| 国产亚洲人成网站在线观看| 中文一区二区在线观看| 嫩草成人www欧美| 亚洲电影观看| 欧美99久久| 亚洲精品国产精品国自产观看| 久久久免费精品视频| 国产一区二区中文| 久久久久久久久久看片| 国产综合久久| 1769国产精品| 欧美日韩成人免费| 亚洲在线观看视频网站| 欧美日韩一区在线播放| 亚洲福利av| 欧美激情中文字幕乱码免费| 999亚洲国产精| 国产精品你懂的在线欣赏| 在线一区二区三区四区五区| 国产精品久久久久久模特| 亚洲欧洲av一区二区| 国语自产精品视频在线看| 欧美精品在线观看一区二区| 夜夜嗨一区二区| 国产日韩欧美亚洲| 欧美区在线播放| 一本色道久久99精品综合| 久久久99精品免费观看不卡| 国产欧美一级| 国产精品久久久久影院色老大| 久久蜜桃精品| 欧美在线一级视频| 亚洲在线网站| av不卡在线看| 亚洲精品国产精品乱码不99| 欧美日本一区二区视频在线观看| 另类图片综合电影| 免费欧美电影| 亚洲欧美日韩专区| 亚洲国产小视频在线观看| 国产婷婷成人久久av免费高清 | 在线观看欧美日韩| 欧美77777| 国产深夜精品福利| 亚洲综合日本| 国产精品免费一区二区三区在线观看| 亚洲高清在线观看| 久久免费99精品久久久久久| 国产亚洲福利一区| 久久国产免费| 欧美日韩免费一区| 亚洲一区二区三区在线观看视频| 欧美不卡在线| 9色国产精品| 国产精品婷婷| 久久天天躁夜夜躁狠狠躁2022| 精品999成人| 欧美日韩 国产精品| 亚洲一级在线观看| 欧美1区2区| 一区视频在线| 欧美电影在线播放| 亚洲私人影吧| 国产精品视频区| 久久久久久一区二区三区| 国内精品美女在线观看| 欧美在线视频免费播放| 精品va天堂亚洲国产|