FrameWork各個版本常用特性整合

来源:http://www.cnblogs.com/shouce/archive/2016/03/08/5252662.html
-Advertisement-
Play Games

· 代碼段。這個功能很早就知道了,Framework已經提供了很多代碼段,我們也可以自定義代碼段,不過之前一直沒有用過,今天實踐了一下,還是挺有意思的,這種代碼自動生成的思想其實挺有用的。另外發現一點,Framework中提供的代碼段中,關於C#和VB的數量明顯不一樣,不知道為啥C#要少呢?上網查了


· 代碼段。這個功能很早就知道了,Framework已經提供了很多代碼段,我們也可以自定義代碼段,不過之前一直沒有用過,今天實踐了一下,還是挺有意思的,這種代碼自動生成的思想其實挺有用的。另外發現一點,Framework中提供的代碼段中,關於C#和VB的數量明顯不一樣,不知道為啥C#要少呢?上網查了一下,說MSDN中提供了對C#代碼段的擴展,可以下載下來試驗一下。

· 重構。之前通過IDE進行重構時,一直是在Eclipse中用,感覺非常方便。現在VS2005也加上這個功能了,感受了一下,和Eclipse差不多,一個比較好的地方是通過VS2005進行重構時,可以對同一個解決方案中不同的項目保持同步,這一點非常有用。

· 調試。VS2005可以支持Debug時對代碼進行修改,這個特性已經用得非常頻繁了。

· 可空類型。對於布爾類型,可以給他指定ture或false。請看如下代碼

複製代碼
public void test()
            {
                int? i = null;
                int? y = 4;
                int? x = i + y;
                Console.Write(x);//x為null  
            }
複製代碼

· 空合併運算符。空合併運算符提供了一種快捷的表達方式,可以在處理可空類型和引用類型時表示null可能的值。

1). 如果第一個操作數不是null,那麼整個表達式等於第一個操作數的值。

2).如果第一個操作數是null,那麼整個表達式就等於第二個操作數的值。

int? a=null
int b;
b=a??10;//b=10;
a=3;
b=a??10//b=2;

如果第二個操作數不能隱含的轉換為第一個操作數的類型,就會生成一個編譯錯誤。

匿名類型

複製代碼
public object test()
        {
            return new { a="1",b="2"};
        }
 dynamic dy = new ExpandoObject();
            dy = test();
            Response.Write(dy.b);
複製代碼

哈,dynamic類型2.0可沒有。這裡先借用著。

部分類(partial class)

這個沒啥可說的,就是把一個類拆開為兩個類而已,但是類名就得相同了。常見於.net的控制項初始化都寫到了部分類裡邊。

複製代碼
 public partial class test {
        
        /// <summary>
        /// Head1 控制項。
        /// </summary>
        /// <remarks>
        /// 自動生成的欄位。
        /// 若要進行修改,請將欄位聲明從設計器文件移到代碼隱藏文件。
        /// </remarks>
        protected global::System.Web.UI.HtmlControls.HtmlHead Head1;//這行
}
複製代碼

將這行代碼貼到.cs文件中,程式也將是一樣運行。

FrameWork3.5特性

3.5的特性在日常工作中,有意/無意的也使用的比較多了。下麵一一羅列

這是我在找版本特性時候找到的一個鏈接http://weblogs.asp.net/scottgu/archive/2007/11/19/visual-studio-2008-and-net-3-5-released.aspx。

裡邊介紹了3.5版本的新特性。

.LINQ

略,這個討論的人太多了。到處都是

· Lambda

自C#3.0開始,就可以使用一種新語法把實現代碼賦予委托:Lambda表達式。

只要有委托參數類型的地方,就可以使用Lambda表達式。

Lambda運算符"=>"的左邊列出了需要的參數。Lambda運算符的右邊定義了賦予Lambda變數的方法的實現代碼.

複製代碼
public delegate string thisAction(string par);
        static void Main(string[] args)
        {
            thisAction lambda = a => {return a += "this is my test";};
        //此處可以理解為使用了匿名函數?
        //一般而言,應該 為 thisAction lambda=functionName。
            string aa = lambda("Hi, ");
            Console.Write(aa);
   }
複製代碼

下麵這種:

複製代碼
  public delegate string thisAction(string par);
        static void Main(string[] args)
        {       
          //  thisAction lambda = a => {return a += "this is my test";};   
    thisAction lambda=functionName;
            string aa = lambda("Hi, ");
            Console.Write(aa);
}
 static string functionName(string par)
        {
            return par += "this is my test";
        }
複製代碼

應該是這樣吧,手敲的沒有去測試呢。

只不過一個是把邏輯放到了Lambda中,一個用方法封裝了下,然後直接將方法名賦給委托。哦,對了,哪個註釋的地方,應該不是匿名函數了。只是lambda支持的一種寫法而已。

所以從上面也可以看到很多人都採用第一種方法,把邏輯寫到lambda中,而沒有將該邏輯封裝到一個方法中,然後調用方法名。 捋清思路就好看別人寫的代碼了。

(其實我一直理解是lambda是用在集合的地方。但是總是喜歡混淆。)

· Var 隱含類型變數

類型推斷,編譯器根據變數的初始值來“推斷”變數的類型。

需要遵循的規則:

1)變數必須初始化。否則,編譯器沒有推斷變數類型的依據。

2)初始化器不能為空。

3)初始化器必須房在表達式前。

4)不能把初始化器設置為一個對象,除非在初始化器中創建了一個新的對象。

· 自動屬性,對象初始化器和集合初始值

以前:

private int property;
        public int Property
        {
            get { return property; }
            set { property= value; }
        }

現在可以簡寫了:

public int Property { get; set; }
//(註:快速便捷方式 prop(propfull..)+Tab鍵+Tab鍵)

對象初始化:

UserInfo model = new UserInfo { id = Person.id, name =Person.name, age =Person.age };

(Person.Id是下麵的匿名類型)

集合初始化:

List<UserInfo> list = new List<UserInfo> {
            new UserInfo{age=1,name="Name",id=1},
            new UserInfo{age=2,name="Name",id=2},
            };

· 擴展方法(Extension Method)

這個特性使用得好的話,能省很多代碼。

定義:擴展方法,它允許改變一個類,但不需要該類的源代碼。擴展方法是靜態的,他是類的一部分,但實際上沒有放在類的源代碼中。(更多參考:http://www.cnblogs.com/ldp615/archive/2009/08/07/1541404.html )

 Eg:

複製代碼
public static class Extention
        {
            public static MvcHtmlString WriteHtml(this HtmlHelper htmlHelpder, string html)
            {
                return new MvcHtmlString(html);
            }
            public static string toJsons(this object o)
            {
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                return serializer.Serialize(o);
            }
        }
複製代碼

調用:

 var model = list[0];
            string jsonStr = model.toJson();  //調用的擴展方法toJson()

結果:

{"id":1,"name":"Name","age":1}

註意:

1).如果擴展方法與該類型中定義的方法具有相同的簽名,則擴展方法永遠不會被調用。

2).擴展方法被在命名空間級別放入範圍中。例如,如果您在同一個名為 Extensions 的命名空間中具有多個包含擴展方法的靜態類,則這些擴展方法將全部由 using Extensions; 指令放入範圍中。

總結:和普通的靜態方法有何差別。在這個方法的第一個參數前面多了一個this關鍵字。擴展方法:
1).方法所在的類必須是靜態的
2).方法也必須是靜態的
3).方法的第一個參數必須是你要擴展的那個類型,比如你要給int擴展一個方法,那麼第一個參數就必須是int。
4).在第一個參數前面還需要有一個this關鍵字。 

匿名類型

Var關鍵字,用於表示隱式類型化的變數,var和new關鍵字一起使用時候,可以創建匿名類型。匿名類型只是一個繼承自Object且沒有名稱的類。該類的定義從初始化中推斷,類似於隱式類型化的變數。

Eg: 

 var Person = new { id = 1, name = "yourName", age = 22 };
UserInfo model = new UserInfo { id = Person.id, name =Person.name, age =Person.age };

(註意區分,匿名類型下與對象初始化賦值的區別)

· ASP.NET AJAX

略。

樓主吐槽下,8月份來的新公司,這公司項目也有價值吧,算是個電商企業(旅游塊)的,可是項目裡邊全屏控制項,超級無敵難維護,樓主幾乎沒用過控制項寫代碼好反感啊,而且那個控制項ajax 看不懂啊.. 編譯項目各種報錯.

FrameWork4.0特性

4.0伴隨著mvc的火熱,很多精品的內容,但是樓主沒環境享受,扼腕嘆息下。

推薦下參閱地址http://www.cnblogs.com/webabcd/archive/2010/06/29/1767212.html

上公司中樓主常用的特性列舉下。

· 動態類型

創建自己的動態對象有兩種方法:

1)從DynamicObject中派生。

2)使用ExpandoObject。使用DynamicObject需要做的工作比較多,因為必須重寫幾個方法,而ExpandoObject是一個可立即使用的密封類。

dynamic dyPerson = new ExpandoObject();//創建一個動態對象。

動態類型有兩個限制。動態對象不支持擴展方法,匿名函數(lmabda表達式)也不能用做動態方法調用的參數

· 可選參數和命名參數

/* * 命名參數和可選參數 * 命名參數:調用方法時,可以不按位置傳遞參數,而是指定參數的命名來傳值 * 可選參數:聲明方法中的參數時,可以為其設置預設值,那麼在調用該方法時,這種可選參數是可以忽略的 */ 

可以參考mvc3中,預設的路由中看到有使用。

eg:

public void FunctionNamedParam(int x, int y , int z=1)

在函數調用將是:

FunctionNamedParam(x:1, z:3, y:2);
FunctionNamedParam(y:1, x:3);

ok,完結了。這些東西都是樓主邊工作邊學習邊自己總結的,拿出來有些寒磣,不過畢竟是自己一點點積累的。當然有缺漏的,也懇請大家補充,相互交流。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 插入到functions.php目錄裡面 //保護後臺登錄add_action('login_enqueue_scripts','login_protection'); function login_protection(){ if($_GET['wangyu'] != '1414060215478
  • 只要使用過jQuery的,想必對ready都不陌生,$(function(){})和$(document).ready(function(){})的使用更是習以為常。那它內部是怎麼實現的呢,嘿嘿,我們不妨一同學習學習
  • fancybox可以彈出很多窗體,甚至一個swf格式的小視頻。但這樣的swf視頻播放的時候並沒有任何的控制項。只能重頭看到尾,或者關閉。我們可以利用fancybox彈出div盒子的方式配合html5很快的寫出彈出一個小視頻的代碼。首先,效果如下圖所示。點擊播放的圖片,彈出播放視頻。背景自動虛化。 首先
  • 今天分享使用html+css3+少量jquery實現滑鼠移入移出圖片生成隨機動畫,我們先看最終效果圖(截圖為靜態效果,做出來可是動態的喲) 左右旋轉 上下移動 縮放 由於時間關係我就不一步步解析各段代碼所代表含義,我這裡就給出一些思路及關鍵 代碼: 1、首先使用ul li展現4張圖片 本示例中不僅使...
  • 出處:http://www.cnblogs.com/edisonfeng/p/3830224.html 一、服務端 1、主要結構: 2、主要代碼: 1)web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmln
  • 一、前言 我很喜歡電腦,可是筆記本還是太大,筆記本電腦再小還是要弄個小包背起來的,智能手機則不同,它完全就是一個手機,可以隨意裝在一個口袋裡隨身攜帶。因此我在2002年左右時最喜歡玩裝備是Dell的PDA,2007年的時候最喜歡玩的是N73,而在2010年最喜歡玩的則是Milestone。眼見著手機
  • Button btNext=(Button)findViewById(R.id.next); btNext.setOnClickListener(new Button.OnClickListener(){ public void onClick(View view){ //創建一個佈局管理器控制項 L
  • 服務 服務的生命周期 --- 1 開啟服務的生命周期 完整的生命周期:onCreate()-->onStartCommand()-->onDestroy() * 開啟服務:onCreate()-->onStartCommand() * 停止服務:onDestroy() * 特點: 1. 服務可以被多
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...