使用動態鏈接庫
下面這個例子示范如何創建和使用用戶定義的類以及如何創建動態鏈接庫。利用文本編輯器創建兩個文件。第一個是Apple.cs,內容如下:
public class Apple {
private string variety = "";
public Apple(string appleVariety) {
this.variety = appleVariety;
}
public void outputVariety() {
System.Console.WriteLine(variety);
}
}
第二個文件是Example2.cs,內容如下:
class Example2 {
static void Main() {
Apple mac = new Apple("Macintosh ");
Apple gra = new Apple("Granny Smith");
Apple cor = new Apple("Cortland");
mac.outputVariety();
gra.outputVariety();
cor.outputVariety();
}
}
首先,我們定義了一個新的用戶定義類,名字為Apple。雖然Apple類並不一定要放到獨立的文件中,但把每個類都放到自己獨立的文件中是一個好的面向對象編程習慣,有助於簡化組織和管理。我們為Apple類的聲明加上了public修飾符(public class Apple),這樣其他類就可以創建Apple類的實例。
下一行代碼定義了實例變量variety。使用了修飾符private之後,只有在Apple類的內部才可以直接訪問variety變量。這是一種常見的面向對象編程習慣,稱為封裝。封裝之後,對象的工作細節對於對象的用戶來說就隱藏不可見了。你現在正使用的鍵盤就是封裝在現實世界中一個很好的例子。我們並不完全了解鍵擊如何發送到控制器(我們之中的大多數都不知道),但只要理解它的接口如何運作就可以了。例如我們知道,打開文本編輯器,按下鍵盤上的“&”鍵,“&”字符就會出現在屏幕上。如果每一個人都必須了解鍵盤的工作細節而不是只要了解它的接口,我們之中不會有很多人使用它。
接下來的三行代碼是:
public Apple(string appleVariety) {
this.variety = variety;
}
這三行代碼定義了Apple類的構造函數。類的構造函數類似一個描述如何創建類實例的藍圖。我們能夠很容易地將構造函數和類裡面的其他方法區分開來,因為構造函數總是和類具有相同的名字。在本例中,類Apple的構造函數有一個字符串參數,這個參數值隨後被保存到實例變量variety。
Apple類的最後一個方法是outputVariety()。這個方法為訪問實例變量提供了接口,所以稱為存取方法(Accessor Method)。
下面我們來看Example2類。這個例子與前文例子的區別在於要創建並使用用戶定義類Apple的實例。我們用new操作符創建了三個Apple類的實例。創建類的實例時,我們無需顯式地調用類的構造函數,new操作符將自動為我們調用類的構造函數。創建了三個Apple類的對象之後,我們依次調用這三個對象的outputVariety方法,由outputVariety方法輸出這三個對象裡variety的值。
下面我們來編譯和運行這個例子。首先我們要把Apple類編譯成動態鏈接庫,命令如下:
csc /target:library Apple.cs
/target:library表示不要創建執行文件,而是創建一個.dll文件(即動態鏈接庫)。所以,上面的命令將生成一個Apple.dll文件。
接下來我們編譯Example2.cs,編譯命令如下所示:
csc /reference:Apple.dll Example2.cs
現在我們得到了執行文件Example2.exe。執行這個文件可以在控制台上看到如下輸出:
Macintosh
Granny Smith
Cortland