盡管Microsoft Visual Studio .NET 2005(過去好像叫Visual Studio .NET 2004)一再推遲其發布日期,但廣大開發者對其的猜測以及各種媒體對其各方面的“曝光”也似乎已經充斥了網絡。但與C#有關的文章似乎無外乎兩個方面:VS.Net 2005 IDE特性、介紹C# 2.0中引入的“四大特性(泛型、匿名方法、迭代器和不完整類型)”。對IDE的研究我不想談了,微軟就是微軟,他的窗口應用程序總是沒得說的。而就語言本身的改進來說,在我聽完了Anders Hejlsberg在Microsoft Professional Developers Conference 2003(2003.10, Los Angeles, CA)上的演講後,發現除了這四大特性之外,還有一些鮮為人知的特性,甚至在微軟官方的文檔《C# Language Specification Version 2.0》中都沒有提到。而這些特性卻更加提高了語言的邏輯性。於是我編寫了大量實際程序研究了這些特性,終於著成本文。本打算發表在《CSDN開發高手》雜志上的,可無奈水平有限,只能留在這個角落裡贻笑大方了。希望能夠對那些對C#語言有著濃厚興趣的朋友有些幫助。
// 程序集內部的類或該類的私有成員通過 // 下面的內部方法對上面的屬性進行設置工作 internal void _setIntValue(int newValue) { if(0 < newValue && newValue < 10) { _intValue = newValue; } else { throw new System.InvalidArgumentException ( “The new value must greater than 0 and less than 10” ); } }
public class A { int _intValue; // 與屬性相關的一個int類型的成員變量
// 公有的屬性, // 允許任何類獲取該屬性的值, // 但只有程序集內部的類和該類中的私有成員 // 能夠設置屬性的值 public int Value { get { return _intValue; } internal set { if(0 < value && value < 10) { _intValue = value; } else { throw new System.InvalidArgumentException ( “The new value must greater than 0 and less than 10” ); } } } // property
// 下面的方法需要對上述屬性進行設置 private void SomeMethod() { int i; // ...... Value = i; } }
尤其在程序集中的其他類的成員中訪問該屬性時相當方便:
// 這是同一個程序集中另外的一個類: public class B { public A SomeMethod() { A a = new A(); a.Value = 8; // 這裡對屬性進行設置,方便! return a; } }
using System.Timer; using System.Windows.Forms; // ...... public class MainForm : Form { System.Timer.Timer CheckTimer; System.Windows.Forms.Timer AnimateTimer; // ...... }
這樣的程序仍然顯得冗長。
在C#2.0中,using指令的使用得到了擴展,我們可以使用using指令來為命名空間指定一個別名。當我們需要引用這個命名空間時,可以簡單地使用它的別名。為命名空間創建一個別名時,我們使用using指令的擴展用法:using Alias = Namespace,即可為命名空間Namespace指定一個別名Alias。而別名和命名空間的使用方法完全相同。當我們引用一個命名空間中的類型的時候,只需要在命名空間後面加一個圓點“.”再跟上類型名稱即可;而引用一個別名所代表的命名空間中的類型時,寫法是一樣的。那麼,上面的例子可以寫作:
using SysTimer = System.Timer; using WinForm = System.Windows.Forms; // ...... public class MainForm : WinForm.Form { SysTimer.Timer CheckTimer; // 與命名空間的使用完全相同 WinForm.Timer AnimateTimer; // ...... }