成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C#3.0的五項改進是什么

本篇內容介紹了“C# 3.0的五項改進是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

成都創(chuàng)新互聯(lián)是一家專業(yè)提供龍圩企業(yè)網站建設,專注與成都網站建設、成都網站設計、H5開發(fā)、小程序制作等業(yè)務。10年已為龍圩眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網站制作公司優(yōu)惠進行中。

1.隱型局部變量

C# 3.0引入了一個叫做“var”的新關鍵字。這個關鍵字允許開發(fā)者建立一個變量,但不必明確它的類型。例如,用var說明一個字符串,就像這樣:

varmyData = "This is my data";

注意,這里并沒有提到myData變量是一個字符串,而C# 2.0卻要求這一點。

雖然var允許您建立隱含的類型,它并沒有降低C#濃厚的類型特征。var關鍵字只有在建立變量時有用,一旦您建立變量并且確定它的類型以后,就不能再用var來改變一個變量的類型。

例如,這段代碼沒有作用:

varmyDate = DateTime.Now;
myDate = "Hello.";

使用var關鍵字還會產生一個有趣的結果,它可以幫助開發(fā)者減少建立變量時的代碼輸入。例如,在C# 2.0中建立一個Customer對象,需要輸入以下代碼:

Customer myCustomer = new Customer();

使用新的var關鍵字,則只要輸入:

varmyCustomer = new Customer();

var關鍵字的另一個特點在于,使用它可以避免改變一個返回某個類型對象的方法調用。例如,在C# 2.0中,如果您需要調用一個返回Customer對象的方法,您應該編寫以下代碼:

Customer myCustomer = GetByName("Zach");

如果某個時候GetByName方法返回一個不是Customer的對象,這段代碼就無法編譯。但是,如果應用var關鍵字,您就不用擔心GetByName返回的對象類型。

varmyData = GetByName("Zach");

現(xiàn)在,因為應用了var關鍵字,GetByName方法能夠進行改變,返回一個Person對象,這個方法調用也依然有效。

2.extension方法

在C#中,您不能繼承和擴充用訪問標識符標記為“封裝”的類型。但在C# 3.0中,extension方法允許您擴充任何類,甚至是標記為封裝的類。例如,如果希望添加一個NoSpaces()方法到字符串類中,我們要定義一個類似列表A中的extension方法。

namespaceMyExtensionMethods
{
 public static class Extension
 {
public static void NoSpaces(this string data)
{
 return data.Replace(" ", "");
}
 }
}

在一個類中導入這個extension方法時,開發(fā)者就能夠對這個類包含的任何字符串調用NoSapces()方法。

extension方法的***個參數決定extension方法的有效類型。在這種情況下,“這個字符串數據”(this string data)表明extension方法適用于字符串類;如果extension方法以“這個對象數據”(this object data)為***個參數,則說明這個方法對每個對象有效。

要表明您希望導入extension方法,只需在它們的命名空間中包括一個using指令。例如,要應用上面說明的方法,需要在類文件中包括一個using MyExtensionMethods指令:

usingMyExtensionMethods;
namespace MyNamespace
{
 public class MyClass
 {
public MyClass()
{
 string data = "this is my data";
 //nospaces will contain "thisismydata".
 string nospaces = data.NoSpaces();
}
 }
}

注意extension方法的優(yōu)先度比instance方法低。因此如果instance方法和extension方法有同樣的簽名,則應執(zhí)行instance方法。

3.對象初始化器

在C# 2.0中,開發(fā)者認為建立許多構造器來設定某個屬性值為對象初始化過程。下面是一個例子: 類訪問Customer方法:

Customer myCustomer = new Customer("Zach", "Smith");

Customer類構造器:

public Customer(string firstName, string lastName) : this()
{
 this.FirstName = firstName;
 this.LastName = lastName;
}
public Customer()
{}

C# 3.0介紹了一個初始化對象的新方法,它允許您在初始化對象時設定任何屬性值。例如,在C# 3.0中,上面的代碼塊可以寫成:

類訪問Customer方法:

Customer myCustomer = new Customer{FirstName = "Zach", LastName = "Smith" };

Customer類構造器:

public Customer()
{}

在C# 3.0代碼中,沒有與初始化對象對應的構造器。這樣,開發(fā)者就不用為每組需要設定的屬性建立不同的構造器。

這樣產生的另外一個效果是:代碼變得更容易閱讀了。例如,雖然我們清楚知道下面的代碼對一個Car對象進行了初始化,但我們并不清楚其中變量的作用:

Car car = new Car(18, 10, 550);

一眼看來,下面這行代碼更易閱讀,盡管我們必須輸入更多代碼:

Car car = new Car { WheelDiameter = 18, WheelWidth = 10, Horsepower = 550 };

4.匿名類型

C# 2.0引入了匿名方法,C# 3.0推出匿名類型。匿名類型與匿名方法類似,它們都是以嵌入方式建立,并沒有正式的名稱。在建立一個匿名類型,您必須組合上述對象初始化器和隱型局部變量兩個概念。下面是一個匿名類型的例子:

varmyType = new { Length = 79, Width = 30 };

匿名類型的范圍與任何其它變量的范圍相同。例如,下面代碼塊中的cobra實例僅僅在Speed函數塊中有效:

private void Speed()
{
 var cobra = new { Horsepower = 550, Torque = 570 };
}

如果一個匿名類型被初始化而另一個匿名類型位于范圍域中,并且它們的簽名相同,第二個類型將自己占用***個類型的類型。例如,在下面這段代碼中,cobra和mustang都是匿名類型,并且可以彼此設定。

private void Speed()
{
 var cobra = new { Horsepower = 550, Torque = 570 };
 var mustang = new { Horsepower = 300, Torque = 300 };
 mustang = cobra; //or you could say cobra = mustang
}

5.LINQ

在之前的C#版中,開發(fā)者應用許多不同的查詢語言來訪問不同的數據源。例如,要查詢一個XML文件,開發(fā)者會使用XPath,要查詢一個SQL數據庫,開發(fā)者將使用SQL。在過去這種方法十分有效,并且現(xiàn)在仍然是訪問各種數據的主要方法。但是,這種方法具有一些缺點。 一個顯著的缺點在于:開發(fā)者必須以一種不同的語言,而非他們當前使用的語言(如SQL或XPath)來編寫查詢代碼。另一個缺點是,在執(zhí)行某些查詢語言,如SQL時,開發(fā)者必須編寫映射代碼將查詢結果轉化為可用的C#業(yè)務對象。

C#3.0推出一種稱之為語言集成查詢(LINQ)的新方法。應用LINQ,開發(fā)者可以編寫出能夠搜索任何IEnumerable<T>數據源的代碼。所以除了應用TSQL訪問MS SQL數據庫,應用XPath訪問XML文件外,他們還可以應用LINQ。

下面的代碼是一個LINQ查詢的例子,它返回所有OrderCount大于10的顧客:

using System;
using System.Query;
using System.Collections.Generic;
public class SampleClass
{
 static void Main() 
 {
Listcustomers = GetCustomers();
//Write our query to retrieve customers who have more than
// 10 orders.
IEnumerablequeryResult = from customer in customers
where customer.OrderCount > 10
orderbycustomer.ID
select customer;
 }
}

與SQL或XPath不同,LINQ查詢用C#,而非第三方語言編寫。這樣,查詢就不會出現(xiàn)類型問題,開發(fā)者也就沒有必要編寫映射代碼把查詢返回的數據轉化成C#對象,而由LINQ API自動處理映射。

“C# 3.0的五項改進是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網站,小編將為大家輸出更多高質量的實用文章!

文章標題:C#3.0的五項改進是什么
網站路徑:http://jinyejixie.com/article34/psgcse.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制網站、微信公眾號、網站維護、企業(yè)網站制作、外貿建站商城網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
平顺县| 任丘市| 泸西县| 会泽县| 汉阴县| 嘉义县| 温宿县| 博湖县| 阿合奇县| 进贤县| 巧家县| 洛阳市| 苏州市| 称多县| 廉江市| 五河县| 屏东县| 浏阳市| 江华| 洪江市| 延庆县| 龙南县| 岐山县| 屏边| 赤壁市| 筠连县| 嘉义县| 天津市| 曲阳县| 门头沟区| 辽阳市| 昌图县| 莎车县| 闻喜县| 鄂尔多斯市| 清镇市| 武隆县| 贵州省| 旺苍县| 桐柏县| 泾阳县|