深入理解C# 3.0的五項主要改進
2006/12/13 9:03:14
1.隱型局部變量

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

    varmyData = "This is my data";
  注意,這里并沒有提到myData變量是一個字符串,而C# 2.0卻要求這一點。

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

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

    varmyDate = DateTime.Now;
myDate = "Hello.";
  使用var關鍵字還會產生一個有趣的結果,它可以幫助開發者減少建立變量時的代碼輸入。例如,在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");
  現在,因為應用了var關鍵字,GetByName方法能夠進行改變,返回一個Person對象,這個方法調用也依然有效。

  2.extension方法

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

  列表A

    namespaceMyExtensionMethods
{
 public static class Extension
 {
  public static void NoSpaces(this string data)
  {
   return data.Replace(" ", "");
  }
 }
}
  在一個類中導入這個extension方法時,開發者就能夠對這個類包含的任何字符串調用NoSapces()方法。

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

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

  列表B

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

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

3.對象初始化器

  在C# 2.0中,開發者認為建立許多構造器來設定某個屬性值為對象初始化過程。下面是一個例子: 類訪問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介紹了一個初始化對象的新方法,它允許您在初始化對象時設定任何屬性值。

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 888米奇四色极速在线观看| 啊灬啊灬用力灬别停岳视频 | 色屁屁www影院免费观看视频 | 国产大学生真实视频在线| 91香蕉视频下载导航| 妖精www视频在线观看高清| 亚洲va欧美va| 正在播放高级会所丰满女技师| 公啊灬啊灬啊灬快灬深用 | 好大好硬使劲脔我爽视频| 久久97久久97精品免视看秋霞| 果冻传媒第一第二第三集| 亚洲福利秒拍一区二区| 青青草国产精品久久| 国产精品亚洲欧美日韩一区在线| AAA日本高清在线播放免费观看| 日韩无套内射视频6| 亚洲国产欧美国产综合一区| 美女范冰冰hdxxxx| 国产剧情jvid在线观看| 99在线免费观看视频| 成人免费大片免费观看网站| 久久久久成人精品无码| 日韩欧美中文字幕在线观看| 亚洲一区电影在线观看| 福利一区二区三区视频在线观看 | 国产在线无码视频一区二区三区| 看黄色免费网站| 国产精品高清尿小便嘘嘘| 中文字幕乱码人在线视频1区| 日本最新免费二区三区| 久久精品无码一区二区日韩av| 欧美乱子伦videos| 免费吃奶摸下激烈视频| 精品欧美一区二区3d动漫| 国产三级a三级三级| 青草青草伊人精品视频| 国产天堂在线观看| 91xav在线| 国产香蕉精品视频| ssswww日本免费网站片|