成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET 3.5擴(kuò)展方法點(diǎn)評(píng):優(yōu)點(diǎn)與問(wèn)題

開(kāi)發(fā) 后端
本文介紹了.NET 3.5擴(kuò)展方法的一些特性,創(chuàng)建方法,優(yōu)點(diǎn)以及存在的一些限制。擴(kuò)展方法很好用,使用上確實(shí)可以和動(dòng)態(tài)語(yǔ)言像 Python、Ruby 之類的相比了。

.NET 3.5擴(kuò)展方法:新增的語(yǔ)言特性

原本,我聽(tīng)說(shuō) Partial Class 的時(shí)候,以為可以為已存在的類添加方法了,不過(guò),Partial Class 只能在同一個(gè) Assembly 之中的要求,使得它并不能實(shí)現(xiàn)這一點(diǎn)。.Net 3.5 增加了很多語(yǔ)言特性,擴(kuò)展方法是其中一個(gè)。用擴(kuò)展方法,我們就可以為已經(jīng)存在的類添加方法。

  1. public static class ExtendTest      
  2. {      
  3.     public static Print(this object o)      
  4.     {      
  5.         Console.WriteLine(o);      
  6.     }      
  7. }     

之后,就可以對(duì)于任意的 object 使用這個(gè)方法:

  1. string s = "hello";      
  2. s.Print();      
  3. "X".Print();      
  4. MyClass x = new MyClass();      
  5. x.Print();     

.NET 3.5擴(kuò)展方法的創(chuàng)建

對(duì)于擴(kuò)展方法的創(chuàng)建,基本上,只有兩點(diǎn)記住就可以了:必須是靜態(tài)方法,***個(gè)參數(shù)增加 this 關(guān)鍵字。

用 Reflector 查看了一下,和我的猜測(cè)基本一致,其實(shí)它的實(shí)現(xiàn)是使用的自定義屬性,所以擴(kuò)展方法基本上可以看成是編譯器特性:

  1. public static class ExtendTest      
  2. {      
  3.     [ Extend ]      
  4.     public static Print(object o)      
  5.     {      
  6.         Console.WriteLine(o);      
  7.     }      
  8. }     

擴(kuò)展方法很好用,使用上確實(shí)可以和動(dòng)態(tài)語(yǔ)言像 Python、Ruby 之類的相比了。不過(guò),畢竟 C# 是靜態(tài)語(yǔ)言,擴(kuò)展方法還是有一些限制的。

.NET 3.5擴(kuò)展方法的限制

一個(gè)限制是:不能使用原有類的私有或保護(hù)成員。這個(gè)問(wèn)題,怎么說(shuō)呢,大部分情況下沒(méi)有問(wèn)題,不過(guò)如果真的想使用私有或保護(hù)成員的時(shí)候,會(huì)很頭疼。如果要給 .Net framework 中的類添加方法,這個(gè)問(wèn)題也許并不是太大吧,畢竟一般我們也只知道它們的公有成員。如果要給自己的 DLL 添加一個(gè)新的 DLL,也做到原有 DLL 用于 .Net 2.0,新 DLL 擴(kuò)展原 DLL 的話,比較會(huì)遇到。我在 DbEntry.Net 中對(duì)于這個(gè)問(wèn)題的解決方案是,使用友元程序集。這種方法還是需要修改原 DLL,添加新 DLL 為友元程序集,另外,將需要訪問(wèn)的成員標(biāo)注為 internal 才行。

另一個(gè)限制:不能給一個(gè)類添加靜態(tài)方法。不知道是不是我沒(méi)有找到,反正感覺(jué),本來(lái)就是靜態(tài)方法了,怎么才能再標(biāo)注為實(shí)現(xiàn)靜態(tài)方法呢?難道用 static static ?當(dāng)然,使用的場(chǎng)景應(yīng)該也不多吧。

再一個(gè)限制:不能給一個(gè)類添加接口。這個(gè)么,本來(lái)就不是擴(kuò)展方法的設(shè)計(jì)目標(biāo),而且,實(shí)現(xiàn)上似乎也會(huì)麻煩很多,所以本來(lái)不該抱怨,不過(guò),如果能實(shí)現(xiàn)的話,確實(shí)會(huì)有很多地方會(huì)很方便。比如,如果能給 DbObjectModel 添加 IQueryable 接口,就可以只通過(guò)增加一個(gè) using 而實(shí)現(xiàn)所有的 Linq 功能,而有這個(gè)限制的時(shí)候,只能再實(shí)現(xiàn)一個(gè) LinqDbObjectModel 之類的了……

我發(fā)現(xiàn)的,就這3個(gè)限制,其它方面,都實(shí)現(xiàn)的很好,IDE 提示也很舒服~

【編輯推薦】

  1. 淺析C#擴(kuò)展方法
  2. .NET 3.5擴(kuò)展方法和Lambda表達(dá)式
  3. Lambda表達(dá)式:要性能還是要清晰的代碼?
  4. .NET Lambda表達(dá)式的函數(shù)式特性:索引示例
  5. .NET Lambda表達(dá)式的語(yǔ)義:字符串列表范例
責(zé)任編輯:yangsai 來(lái)源: JavaEye博客
相關(guān)推薦

2009-08-10 17:11:34

.NET 3.5擴(kuò)展方Lambda表達(dá)式

2010-01-21 10:48:18

VB.NET擴(kuò)展方法

2009-12-02 09:07:45

ASP.NET 4.0

2009-07-24 15:47:35

ASP.NET與ASP

2009-07-29 15:17:42

驗(yàn)證控件ASP.NET1.1ASP.NET2.0

2010-01-05 15:52:07

.NET Framew

2010-03-12 18:16:07

Python編程語(yǔ)言

2009-12-14 16:59:57

.NET Framew

2009-08-05 15:50:13

ASP.NET優(yōu)點(diǎn)

2009-06-18 15:14:53

Spring osgi

2009-03-09 10:28:45

AJAXASP.NETWEB

2009-07-27 17:38:30

WCF服務(wù)ASP.NET 3.5

2009-12-10 14:04:09

.Net Framew

2009-08-06 16:11:17

2010-01-06 11:21:49

.NET Framew

2009-12-14 10:19:23

.NET Framew

2009-12-22 09:25:57

ADO.NET3.5

2009-02-01 13:57:53

ASP.NET.NET圖表控件

2009-08-12 17:33:25

繼承與擴(kuò)展方法

2009-06-08 16:00:00

ASP.NET 3.5
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产福利在线 | 国产乱码精品一区二区三区中文 | 成人免费大片黄在线播放 | 久久久亚洲精品视频 | 国产美女特级嫩嫩嫩bbb片 | 亚洲精品久久久久中文字幕欢迎你 | 午夜精品久久久久久久久久久久久 | xxxxx免费视频| 啪啪毛片 | 狠狠干在线 | 日韩在线免费 | 在线免费观看成年人视频 | 麻豆成人在线视频 | 亚洲一区二区综合 | 九九综合 | 中文字幕在线免费观看 | 日本三级电影在线看 | 亚洲欧美在线观看 | 超碰在线97国产 | 在线精品一区二区 | 综合网视频 | 亚洲日日操 | 日韩欧美一区二区三区 | 久久久久国产精品一区二区 | 午夜一区二区三区在线观看 | 日韩精品免费视频 | 91久久精品一区二区二区 | 视频一区二区三区在线观看 | 午夜精品久久 | 中文字幕 在线观看 | 欧美性受xxxx白人性爽 | 欧美在线色| 国产精品久久久久久一区二区三区 | 日韩精品视频在线观看一区二区三区 | www.com久久久 | 伊人春色在线观看 | 亚洲日本一区二区三区四区 | 精品一区二区三 | 日本久久精品视频 | 99久久国产精 | 天天操夜夜看 |