程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#教程第七課:類的入門

C#教程第七課:類的入門

編輯:關於C語言

本節課將介紹C#中的類,其目的如下:
1.了解構造函數的實現

2.了解實例和靜態成員的區別

3.了解析構函數的使用

4.熟悉類的成員類型

在本教程的一開始,你就已經接觸到類的用法了。現在,既然已經對類有了感性認識,並知道如何定義一個類,本節課將

定義類的格式是:關鍵字"Class"後面跟著類名,類名之後的大括號中包含的是類的成員。構造函數沒有返回值,且與類同名。清單7-1是一個關於類的例子。

清單 7-1. Example C# Classes: Classes.cs

// Namespace Declaration
using System;
// helper class
class OutputClass {
string myString;
// Constructor
public OutputClass(string inputString) {
myString = inputString;
}

// Instance Method
public void printString() {
Console.WriteLine("{0}", myString);
}
// Destructor
~OutputClass() {
// Some resource cleanup routines
}
}

// Program start class
class ExampleClass {
// Main begins program execution.
public static void Main() {
// Instance of OutputClass
OutputClass outCl = new OutputClass("This is printed by the output class.") { }
// Call Output class' method
outCl.printString();
}
}

說明

1.清單7-1 演示了兩個類。

第一個類"OutputClass"包括:一個構造函數,一個實例方法,以及一個析構函數,還包括一個域名"myString"。構造函數是用來初始化類的數據成員的。本例中,OutputClass類的構造函數接收一個字符串參數,並把它拷貝到該類的myString域中。

2.構造函數並不是一定要用戶自己定義的,例如ExampleClass類就用到了缺省的構造函數。

缺省的構造函數很簡單,且不帶參數。但這樣的構造函數並沒有多大用處。為了使得缺省的構造函數能夠有些用途,用戶自己可以對它初始化。例如:

public OutputClass() : this("Default Constructor String") { }

這種形式的構造函數可以包含在清單7-1中的OutputClass類中。該缺省的構造函數後跟著初始化符。分號":"標志著初始化開始,後面的"this"是關鍵字,表示OutputClass這個類所對應的對象。this可以有效地調用該對象中的構造函數。"this"關鍵字後面的參數為字符串類型。上面的初始化工作調用了OutputClass構造函數,該構造函數接收一個字符串類型的數據作為參數。初始化工作確保在類的域能夠在類的實例化過程中被初始化。

上面的例子表明:一個類可以有多種格式的構造函數。具體調用哪一種構造函數取決於參數個數及參數類型。

類成員的類型
在C#中,有兩種類型的類成員,實例和靜態的。每次定義類的對象時,就創建了該類的一個實例。ExampleClass中的 Main() 方法創建了OutputClass類的一個名為"outCl"的實例。你可以用不同的名字創建OutputClass類的多個實例。這些實例都是各自獨立的。例如,OutputClass類的兩個實例創建如下:

OutputClass oc1 = new OutputClass("OutputClass1");
OutputClass oc2 = new OutputClass("OutputClass2");

於是,創建了OutputClass類的兩個單獨的實例,且各自帶有單獨的"myString"域和"printString()"方法。上例中,兩個實例名為"oc1" 和"oc2"。 另外一方面,如果類成員是靜態的,可以通過如下格式來訪問: <classname>.<static class member>。

一旦OutputClass類有如下的靜態方法:


static void staticPrinter() {
Console.WriteLine("There is only one of me.");
}
你就可以用下面的方式,從Main()中調用該函數:
OutputClass.staticPrinter();

注意:

調用類的靜態成員必須通過類名而不是實例名。類的靜態成員的副本僅有一個。

另外一種類型的構造函數是靜態構造函數。 通過在構造函數名稱的前面使用關鍵字"static",就可以定義一個靜態的構造函數。 調用靜態的構造函數的發生時間是:在創建類的實例之前 ,在調用類的靜態成員之前,在調用派生類的靜態構造函數之前。(在後續課程中將介紹),且僅被調用一次。

OutputClass也有一個析構函數,除了前面加上了"~"符號,就跟構造函數的格式一樣。析構函數用於釋放類所占用的資源。當C#垃圾搜集器決定把對象從內存中清除出去時,就會調用析構函數。

小結
現在,你已經了解了類的如下成員:域,方法,構造函數,析構函數。下面是類的完整的成員類型:

構造函數;析構函數;域;方法;屬性;索引;代理 ;事件;嵌套類

上面沒有介紹過的類型將在後續課程中講解。

概括地講,你現在已經學會了如何定義常規的和靜態的構造函數,也了解了如何初始化類的域。如果沒有必要實例化一個對象,可以創建靜態的類成員。你也了解了用來釋放資源的析構函數的用法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved