精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談如何使用Lambda表達式做抽象代表

開發 后端
在.NET中,Lambda表達式只不過是方便的代表句法。因此為什么不能在框架需要代表的地方使用Lambda表達式呢?那么我們應該怎么做呢?

Lambda表達比代表定義和帶外方法定義的結合更清楚,且相關的額外工作只需要滿足語言定義即可。不過,它也有一些不足之處。如果某個方法的參數包含System.Delegate 這樣的抽象類型,用lambda表達式介紹特殊的問題:C#編譯器不能將lambda表達式轉換成還未明確定義的衍生代表類型。

如果不仔細思考一下,你的代碼看上去就會像是來自.NET1.0的東西。在本文中,我將告訴告訴你為什么lambda表達式不足以被直接轉換成抽象代表類型,并且教你怎樣使得編譯器轉換你所定義的指定代表。解決方案依賴于Windows Presentation Foundation(WPF)和System.Windows.Threading.Dispatcher組件,但是嚴格意義上說,該問題不是一個WPF問題。文中所描述的問題出現在若干.NET框架中,包括Windows Forms,Office 應用程序接口和映射應用程序接口。你可以按照下列方法來處理同類問題。

無論我什么時候使用.NET框架中帶有來自代表表格的參數的應用程序接口,我都會傾向于使用lambda表達式而不是更詳細的表達式。例如,這行代碼創建了一個System.Windows.Threading.Timer,在計時器失效時,該代碼調用了一個TickHandler方法:

tick = new System.Threading.Timer((unused) => 

TickHandler());

如果方法的內容足夠少,我就會用方法的內容替代TickHandler()方法調用。該方法大多數情況下都有效,但是當應用程序接口將System.Delegate作為參數時,這一技巧不管用。例如,我們將System.Windows.Controls.Dispatcher.Invoke()方法穿過WPF中的線程實施調用:

public object Invoke( 

delegate method,

params object[] args)

現在考慮一下當我們嘗試用lambda表達式來執行這樣的調用時,將會發生什么:

MyTime.Dispatcher.Invoke(() => DoSomething());

會出現隱秘錯誤:

error CS1660: Cannot convert lambda expression to 

type 'System.Delegate' because it is not a delegate type

或許第一次看到這個錯誤的時候,你還不知道到底是怎么一回事。當然,這的確是一個代表類型。編譯器不像人一樣的靈活。System.Delegate類型是一個抽象類型,且該類型的推理工具不能推斷出自變量或某些用于未知代表類型的返回值的數量和種類。要解決這一問題,我們必須創建一個具體的代表類型并為該類型指定lambda表達式。記住,代表類型要求你將方法視為數據。

我創建了一個WPF計時器程序來展示其工作原理,其中闡述了C#3.0 怎樣簡化與老式應用程序接口(下圖)的運行。

使用Lambda表達式做抽象代表

當你做演示的時候,該示例中的應用程序運行了一個計時器,隨著設定時間流逝,它的顏色會從綠色轉為黃色再轉為紅色。這是一個很好的演示跨線程調用的方法,因為該計時器在背景線程中運行。

按照時間的改變來更新演示要求對出自計時器的事件作出響應。計時器在背景線程中運行,所以你會很輕易地犯我們在前面提到過的錯誤。

更新應用程序

用戶界面處理的是簡單代碼。當計時器失效時它會生效,而且代碼會更新計時器的顯示。這一更新必須改變文本,或控制背景。如下所示:

      MyTime.Background = newBrush; 

MyTime.Content = label

計時器在背景線程上運行,所以你需要通過使用Dispatcher.Invoke()邊界線執行調用。這兩行代碼是你想列入lambda表達式的代碼,不是證明方法定義的邏輯理由。但是我之前就講過lambda不會與Didpatcher.Invoke一起運行,除非是你使用了具體的代表定義才行。這之中的一部分已經在.NET框架3.5中定義了。我們可以使用嵌入式代表定義并對它們進行分配,這些都是的該解決方案比起先前提到過的案例都要省事一些。這兩行代碼也要求一對參數:一個用于文本的字符串和用于背景顏色的顏色刷。這意味著你需要使用的代表定義要考慮到這兩個參數并返回無效值:

Action updateTimer;

在聲明變量后,你可以為代碼指定需要執行的代表變量。這里你可以使用lambda表達式,因為Action是一個具體的代表定義:

updateTimer = (label, newBrush) => 

{

MyTime.Background = newBrush;

MyTime.Content = label;

};

現在,當計時器提出事件時,你已經擁有了一些需要執行的指向該代碼的變量。接下來要做的就只是通過Dispatcher.Invoke()使用代表定義:

if (!MyTime.Dispatcher.CheckAccess()) 

{

MyTime.Dispatcher.Invoke(updateTimer,

newLabel, next);

}

else

updateTimer(newLabel, next);

這一過程十分簡單,但是卻要求你反復進行,因此,我們可以讓步驟變得容易一點。

這里其實由一個簡單的模式。事件處理器可以從背景線程中調用出來。當我們使用計時器,或者異步調用Web服務以及其他類似任務的時候,你就會看到這一行為。無論是在什么時候,我們都不清楚自己位于哪個線程之上,我們可以調用Dispatcher.CheckAccess()來決定是否可以訪問任意用戶界面控件。如果需要從線程邊界執行調用,就必須使用Dispatcher.Invoke()。Dispatcher.Invoke()方法避免了由于使用了方法參數的參數數組而造成的若干超載問題。它使用的是一個我們想要執行的抽象代表類型。

你想要一個能檢查是否需要整理編排的單一方法。如果需要,則方法會編排好調用,否則,會調用由代表指定的方法。你虛偽方法作為System.Windows.Controls.Control 類型的成員出現。這樣使得你可以將代碼作為控件的一部分來使用。C#3.0就為你提供了這樣做的方法:擴展方法。你需要編寫一些方法的不同超載,這些使得你可以通過不同的參數來使用它們:

      public static class WPFExtensions: 

{

public static voidInvokeIfNeeded(

this Control widget,

Action whatToDo)

{

if (!widget.Dispatcher.

CheckAccess())

widget.Dispatcher.Invoke(whatToDo);

else

whatToDo();

}

public static void

InvokeIfNeeded(

this Controlwidget, Action

whatToDo, T parm)

{

if (!widget.Dispatcher.CheckAccess())

widget.Dispatcher.Invoke(whatToDo, parm);

else

whatToDo(parm);

}

public static void

InvokeIfNeeded(this

Controlwidget, Action

whatToDo,

T1 parm1, T2 parm2)

{

if (!widget.Dispatcher.

CheckAccess())

widget.Dispatcher.

Invoke(whatToDo,

parm1, parm2);

else

whatToDo(parm1, parm2);

}

}

當然,我們也可以通過添加更多參數的方式來添加更多超載以擴展這個類。這其實是一個簡單的擴展。

有一種方法讓WPF設計師們瘋狂:他們希望用最小化應用程序接口的面積部分來簡化Dispatcher對象的使用。通過使用抽象代表和參數列表中的參數,這一對象的使用范圍被擴大了。任何帶有參數的方法都可以被拿來使用。但是,這樣做有一個不足之處。該應用程序接口更為抽象,它會破壞所有類型的安全性,而且這樣做會損壞編譯器使用類型推理的能力,從而降低工作效率。需要做的應該是添加自己的安全擴展方法的層類型,這一層類型可以在類型安全調用和更為抽象的.NET庫應用程序接口之間提供一個層。

【編輯推薦】

  1. 在C++中使用Lambda函數提高代碼性能
  2. Lambda表達式入門實例
  3. .NET 3.x新特性之Lambda表達式
責任編輯:彭凡 來源: IT專家網
相關推薦

2009-09-09 13:01:33

LINQ Lambda

2009-08-27 09:57:50

C# Lambda表達

2013-04-10 10:58:19

LambdaC#

2009-08-10 09:41:07

.NET Lambda

2009-08-31 17:11:37

Lambda表達式

2009-09-15 15:18:00

Linq Lambda

2022-12-05 09:31:51

接口lambda表達式

2009-09-11 09:48:27

Linq Lambda

2023-11-02 08:25:58

C++Lambda

2021-06-08 07:48:26

lambda表達式編譯器

2009-09-17 09:44:54

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2009-08-27 09:44:59

C# Lambda表達

2009-09-15 17:30:00

Linq Lambda

2012-06-26 10:03:58

JavaJava 8lambda

2023-09-25 13:28:14

C++Lambda

2010-06-13 14:44:26

Java 7閉包Lambda表達式

2024-03-25 13:46:12

C#Lambda編程

2009-10-12 10:11:08

Lambda表達式編寫

2019-07-17 15:45:47

正則表達式字符串前端
點贊
收藏

51CTO技術棧公眾號

秋霞在线一区二区| 99re在线观看视频| av黄色免费在线观看| 国产一区二区在线观| 午夜av区久久| 美国av在线播放| 天堂中文字幕在线| 精品一区二区免费看| 久久久亚洲欧洲日产国码aⅴ| 一女三黑人理论片在线| 四虎国产精品永久在线国在线| 亚洲第一主播视频| 中文字幕av日韩精品| av电影在线播放| 神马电影网我不卡| 夜色激情一区二区| 亚洲精品中文字幕乱码三区不卡| 丰满熟妇人妻中文字幕| 欧美a一区二区| 国内免费精品永久在线视频| 免费成人美女女在线观看| 成人欧美一区二区三区的电影| 国产精品久久免费看| 国产成人拍精品视频午夜网站| 成年人一级黄色片| 成人动漫免费在线观看| 亚洲国产日韩欧美在线99| 免费在线黄网站| 日韩大胆人体| av午夜一区麻豆| 114国产精品久久免费观看| 成年人视频免费| 国产日韩欧美一区| 国内精品久久久久久| 四虎免费在线视频| 久久伊人影院| 欧美伦理视频网站| 国产又大又黄又粗的视频| 亚洲人成在线网站| 精品国产91久久久久久| 免费高清一区二区三区| a级片国产精品自在拍在线播放| 欧美国产日韩精品免费观看| 欧美日本亚洲| 日韩大胆视频| 久久嫩草精品久久久精品| 精品欧美一区二区三区久久久 | 中文字幕成人在线观看| 免费看国产精品一二区视频| 亚洲欧美综合在线观看| youjizz国产精品| 国产精品污www一区二区三区| 国语对白一区二区| 特黄特色欧美大片| 亚洲精品suv精品一区二区| 免费观看一区二区三区| 一区二区三区欧洲区| 精品久久久久久久久久久久久久久久久 | 精品三级久久| 岛国av午夜精品| 日韩欧美精品在线观看视频| 日韩电影免费观| 欧美午夜精品一区二区三区| 午夜宅男在线视频| 亚洲一区av| 日韩一区二区免费视频| 97中文字幕在线观看| 久久人人爽人人爽人人片av不| 一本久久精品一区二区| 欧美日韩亚洲第一| 国产成人精品一区二区三区在线 | 无限资源日本好片| 国产激情精品一区二区三区| 日韩免费高清视频| a级在线观看视频| 成人短片线上看| 九九精品在线视频| 日产精品久久久| 日本aⅴ精品一区二区三区 | a在线观看免费| 成人免费视频网站在线观看| 蜜桃免费一区二区三区| 午夜视频在线| 亚洲成av人片在www色猫咪| 国产免费毛卡片| 色噜噜成人av在线| 亚洲成avwww人| 午夜时刻免费入口| 欧美.日韩.国产.一区.二区| 国产91精品久久久久久| 中文字幕无码日韩专区免费| 欧美日韩岛国| 国产精品18久久久久久麻辣| 国产又大又黄的视频| 不卡视频在线看| 亚洲啪啪av| av午夜在线观看| 欧美群妇大交群中文字幕| 国产免费无码一区二区| 精品无人区麻豆乱码久久久| 欧美疯狂xxxx大交乱88av| 亚洲欧美日韩一区二区三区四区| 国产一区二区三区视频在线播放| 久久免费一区| 99热国产在线| 欧美日韩黄色影视| 午夜一区二区三区免费| 午夜国产精品视频免费体验区| 日韩美女中文字幕| 日本精品一区二区在线观看| 最新日韩av在线| 国产xxxxx视频| 欧美国产大片| 亚洲第一网中文字幕| 三级黄色片在线观看| 99精品国产在热久久| 亚洲综合小说区| 精品人妻久久久久一区二区三区 | 欧美一卡二卡在线观看| 久久久久久久久久久久| 精品91在线| 91色在线观看| 亚洲乱亚洲乱妇| 欧美丝袜第一区| 91丝袜在线观看| 狠狠入ady亚洲精品经典电影| 91美女片黄在线观| 午夜视频在线免费观看| 欧美亚洲国产bt| 精品欧美一区二区久久久| 国产精品日本欧美一区二区三区| 懂色一区二区三区av片| 超碰在线网址| 91精品国产综合久久久久久久 | 国产精品白丝jk喷水视频一区 | 久久久久久久久久久99999| 国产欧美日韩网站| 波多野结衣欧美| 久99久在线视频| 精品人妻一区二区三区浪潮在线| 亚洲丝袜制服诱惑| 国产一区二区在线观看免费视频| 精品自拍视频| 日韩一二在线观看| 日本午夜在线观看| 国产揄拍国内精品对白| 中文字幕中文字幕99| 日韩电影精品| 另类视频在线观看| 国产xxxx在线观看| 亚洲制服丝袜av| 日本一级片在线播放| 一本色道久久综合一区| 久久久久久久久久码影片| 竹内纱里奈兽皇系列在线观看| 亚洲精品国产欧美| 无码人妻精品一区二区三区9厂| 成人激情综合网站| www.亚洲天堂网| 国产日产一区 | 一区视频网站| 性色av一区二区三区| 青草久久伊人| 欧美日韩国产经典色站一区二区三区 | 国产精品成人在线观看| 欧美性受xxxxxx黑人xyx性爽| 中国成人一区| 国产亚洲精品久久飘花| 亚洲天堂av影院| 中文字幕精品在线视频| 国产乱淫片视频| 亚洲国产欧美另类丝袜| 日韩一级视频在线观看| 人禽交欧美网站| 国产资源第一页| 日韩高清成人在线| 国产啪精品视频网站| 日本aa在线| 亚洲视频欧洲视频| 亚洲一级二级片| 丁香一区二区三区| 最近免费中文字幕中文高清百度| 99国产精品一区二区| 日本久久亚洲电影| 欧美成人hd| 亚洲黄在线观看| 中文字幕视频在线播放| 久久精品无码一区二区三区| www.激情小说.com| 在线欧美视频| 亚洲视频精品一区| 精品亚洲精品| 成人av在线天堂| 亚洲精品国产精品国产| 久久精品久久久久久| 一区精品在线观看| 亚洲图片自拍偷拍| 亚洲综合图片一区| 91丨porny丨国产| 成年人网站av| 日韩精品亚洲专区| 日韩不卡av| 一区二区网站| 成人乱色短篇合集| 国精产品一区二区三区有限公司| 欧美高清视频免费观看| av在线资源站| 亚洲精品一区二区网址 | 亚洲免费视频网站| 精品人妻久久久久一区二区三区| 在线亚洲高清视频| 日韩精品成人在线| 成人精品一区二区三区中文字幕| 亚洲乱码国产一区三区| 亚洲电影av| 成人在线观看毛片| 国产精品毛片一区二区在线看| 欧美国产一区二区在线| 99精品在免费线中文字幕网站一区| 国产精品欧美风情| 欧美一区久久久| 8050国产精品久久久久久| 污污视频在线| 亚洲激情免费观看| 精品国产va久久久久久久| 欧美日韩精品一区二区三区| 无码人妻精品一区二区三区不卡| 天天综合色天天| 日韩特黄一级片| 一区二区三区四区五区视频在线观看 | 同性恋视频一区| 国产亚洲精品自在久久| 99精品国产一区二区三区2021| 99久热re在线精品视频| 深夜福利一区| 91av在线精品| 国产精品原创| 亚州精品天堂中文字幕| sm久久捆绑调教精品一区| 欧美黑人极品猛少妇色xxxxx| 成人福利网站| 欧美日韩福利在线观看| 手机av免费在线| 久久久久国产精品一区| av剧情在线观看| 欧美一级大胆视频| 欧美特黄aaaaaaaa大片| 国产精品黄页免费高清在线观看| 日韩美女在线看免费观看| 国产福利视频一区二区| 精品欧美一区二区三区在线观看 | 二人午夜免费观看在线视频| 亚洲日本中文字幕| av大片在线看| 久久在线精品视频| 蜜桃传媒在线观看免费进入 | 亚洲第一会所| 国产一区二中文字幕在线看| 精品国产麻豆| 国产一区二区不卡视频| 丝袜久久网站| 亚洲一区综合| 国产精品地址| www国产黄色| 久久国产麻豆精品| gogo亚洲国模私拍人体| av电影天堂一区二区在线| 少妇久久久久久久久久| 综合色天天鬼久久鬼色| 久草精品视频在线观看| 色视频一区二区| 国产夫妻性生活视频| 亚洲国产黄色片| 淫片在线观看| 久久免费精品日本久久中文字幕| 女厕盗摄一区二区三区| 国产日韩欧美黄色| 国产伦精品一区二区三区在线播放 | 亚洲精品乱码久久久久| 日产精品久久久久久久| 在线观看成人小视频| 国产高清视频免费观看| 亚洲毛片在线看| 在线观看av免费| 日韩免费在线视频| 色悠久久久久综合先锋影音下载| 欧美一进一出视频| 欧美a级在线| 无码少妇一区二区三区芒果| 国产一区二区精品久久| 国产中文字幕一区二区| 综合久久久久久久| 久久久久久久久黄色| 日韩限制级电影在线观看| 国模吧精品人体gogo| 亚洲国产小视频| a√在线中文网新版址在线| 久久久久久久久久久国产| av成人在线播放| 精品无码久久久久久久动漫| 四虎国产精品免费观看| 亚洲精品一区二| 亚洲日本视频| 国产一区二区在线观看免费视频| 久久一夜天堂av一区二区三区| 成熟的女同志hd| 欧美日韩一级二级| 婷婷开心激情网| 欧美激情日韩图片| 国产情侣一区在线| 亚洲高清视频一区| 欧美一级专区| 人妻av一区二区| 亚洲精品写真福利| 一二三四区在线| 亚洲午夜性刺激影院| 成人私拍视频| 狠狠爱一区二区三区| 欧美人成在线| 日本成人xxx| 日韩美女久久久| 亚洲在线视频播放| 一区二区欧美久久| 亚洲承认视频| 欧美日韩三区四区| av不卡在线看| 先锋资源av在线| 亚洲成av人片观看| 日本高清视频www| 久久频这里精品99香蕉| 超碰一区二区三区| 免费网站在线观看视频| 成人一区二区三区视频在线观看| 黄色一级片在线免费观看| 日韩色在线观看| 污污片在线免费视频| 99re在线播放| 亚洲福利一区| 国产人妻人伦精品1国产丝袜| 午夜精品一区在线观看| 欧美 日韩 国产 成人 在线| 韩国一区二区电影| 天堂俺去俺来也www久久婷婷| 国产二级片在线观看| 美女精品一区二区| 免费看一级黄色| 91精品国产入口| 欧美人与禽性xxxxx杂性| 国产伦精品一区二区| 亚洲国产导航| 国产人妻一区二区| 欧美日韩一区二区三区四区| 成黄免费在线| 川上优av一区二区线观看| 欧美精品97| 香港三日本8a三级少妇三级99| 疯狂做受xxxx高潮欧美日本| 你懂的在线免费观看| 国产精品久久色| 欧美成熟视频| 亚洲天堂成人av| 欧美日韩一区在线| 91三级在线| 精品久久精品久久| 日韩成人午夜电影| 动漫性做爰视频| 亚洲国产欧美久久| 久久精品黄色| 日韩精品视频在线观看视频| 91色在线porny| 一区二区视频网站| 欧美激情在线观看视频| 国产精品美女久久久久久不卡 | 久久久精品国产免大香伊| 欧美日韩在线视频播放| 久久视频精品在线| 欧美国产极品| 污污的视频免费| 午夜久久福利影院| 午夜在线视频| 老牛影视免费一区二区| 久久国产欧美日韩精品| 国产成人在线观看网站| 日韩最新av在线| 色婷婷av一区二区三区丝袜美腿| 中文字幕中文在线| 精品久久香蕉国产线看观看亚洲 | 免费在线观看黄色| 一本一本久久a久久精品综合小说| 久久伊人国产| 黄页免费在线观看视频| 国产精品美女久久久久久久久久久 | 电影久久久久久| 国产成人艳妇aa视频在线 | 国产成人精品一区二区三区视频 | 日韩精品国内| 成人av在线观| av无码精品一区二区三区宅噜噜| 国产98色在线| 亚洲激情亚洲|