C#类的入门
本節(jié)課將介紹C#中的類,其目的如下:
1.了解構(gòu)造函數(shù)的實現(xiàn)
2.了解實例和靜態(tài)成員的區(qū)別
3.了解析構(gòu)函數(shù)的使用
4.熟悉類的成員類型
在本教程的一開始,你就已經(jīng)接觸到類的用法了。現(xiàn)在,既然已經(jīng)對類有了感性認(rèn)識,并知道如何定義一個類,本節(jié)課將
定義類的格式是:關(guān)鍵字"Class"后面跟著類名,類名之后的大括號中包含的是類的成員。構(gòu)造函數(shù)沒有返回值,且與類同名。清單7-1是一個關(guān)于類的例子。
清單 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"包括:一個構(gòu)造函數(shù),一個實例方法,以及一個析構(gòu)函數(shù),還包括一個域名"myString"。構(gòu)造函數(shù)是用來初始化類的數(shù)據(jù)成員的。本例中,OutputClass類的構(gòu)造函數(shù)接收一個字符串參數(shù),并把它拷貝到該類的myString域中。
2.構(gòu)造函數(shù)并不是一定要用戶自己定義的,例如ExampleClass類就用到了缺省的構(gòu)造函數(shù)。
缺省的構(gòu)造函數(shù)很簡單,且不帶參數(shù)。但這樣的構(gòu)造函數(shù)并沒有多大用處。為了使得缺省的構(gòu)造函數(shù)能夠有些用途,用戶自己可以對它初始化。例如:
public OutputClass() : this("Default Constructor String") { }
這種形式的構(gòu)造函數(shù)可以包含在清單7-1中的OutputClass類中。該缺省的構(gòu)造函數(shù)后跟著初始化符。分號":"標(biāo)志著初始化開始,后面的"this"是關(guān)鍵字,表示OutputClass這個類所對應(yīng)的對象。this可以有效地調(diào)用該對象中的構(gòu)造函數(shù)。"this"關(guān)鍵字后面的參數(shù)為字符串類型。上面的初始化工作調(diào)用了OutputClass構(gòu)造函數(shù),該構(gòu)造函數(shù)接收一個字符串類型的數(shù)據(jù)作為參數(shù)。初始化工作確保在類的域能夠在類的實例化過程中被初始化。
上面的例子表明:一個類可以有多種格式的構(gòu)造函數(shù)。具體調(diào)用哪一種構(gòu)造函數(shù)取決于參數(shù)個數(shù)及參數(shù)類型。
類成員的類型
在C#中,有兩種類型的類成員,實例和靜態(tài)的。每次定義類的對象時,就創(chuàng)建了該類的一個實例。ExampleClass中的 Main() 方法創(chuàng)建了OutputClass類的一個名為"outCl"的實例。你可以用不同的名字創(chuàng)建OutputClass類的多個實例。這些實例都是各自獨立的。例如,OutputClass類的兩個實例創(chuàng)建如下:
OutputClass oc1 = new OutputClass("OutputClass1");
OutputClass oc2 = new OutputClass("OutputClass2");
于是,創(chuàng)建了OutputClass類的兩個單獨的實例,且各自帶有單獨的"myString"域和"printString()"方法。上例中,兩個實例名為"oc1" 和"oc2"。 另外一方面,如果類成員是靜態(tài)的,可以通過如下格式來訪問: <classname>.<static class member>。
一旦OutputClass類有如下的靜態(tài)方法:
static void staticPrinter() {
Console.WriteLine("There is only one of me.");
}
你就可以用下面的方式,從Main()中調(diào)用該函數(shù):
OutputClass.staticPrinter();
注意:
調(diào)用類的靜態(tài)成員必須通過類名而不是實例名。類的靜態(tài)成員的副本僅有一個。
另外一種類型的構(gòu)造函數(shù)是靜態(tài)構(gòu)造函數(shù)。 通過在構(gòu)造函數(shù)名稱的前面使用關(guān)鍵字"static",就可以定義一個靜態(tài)的構(gòu)造函數(shù)。 調(diào)用靜態(tài)的構(gòu)造函數(shù)的發(fā)生時間是:在創(chuàng)建類的實例之前 ,在調(diào)用類的靜態(tài)成員之前,在調(diào)用派生類的靜態(tài)構(gòu)造函數(shù)之前。(在后續(xù)課程中將介紹),且僅被調(diào)用一次。
OutputClass也有一個析構(gòu)函數(shù),除了前面加上了"~"符號,就跟構(gòu)造函數(shù)的格式一樣。析構(gòu)函數(shù)用于釋放類所占用的資源。當(dāng)C#垃圾搜集器決定把對象從內(nèi)存中清除出去時,就會調(diào)用析構(gòu)函數(shù)。
小結(jié)
現(xiàn)在,你已經(jīng)了解了類的如下成員:域,方法,構(gòu)造函數(shù),析構(gòu)函數(shù)。下面是類的完整的成員類型:
構(gòu)造函數(shù);析構(gòu)函數(shù);域;方法;屬性;索引;代理 ;事件;嵌套類
上面沒有介紹過的類型將在后續(xù)課程中講解。
概括地講,你現(xiàn)在已經(jīng)學(xué)會了如何定義常規(guī)的和靜態(tài)的構(gòu)造函數(shù),也了解了如何初始化類的域。如果沒有必要實例化一個對象,可以創(chuàng)建靜態(tài)的類成員。你也了解了用來釋放資源的析構(gòu)函數(shù)的用法?
?
1.了解構(gòu)造函數(shù)的實現(xiàn)
2.了解實例和靜態(tài)成員的區(qū)別
3.了解析構(gòu)函數(shù)的使用
4.熟悉類的成員類型
在本教程的一開始,你就已經(jīng)接觸到類的用法了。現(xiàn)在,既然已經(jīng)對類有了感性認(rèn)識,并知道如何定義一個類,本節(jié)課將
定義類的格式是:關(guān)鍵字"Class"后面跟著類名,類名之后的大括號中包含的是類的成員。構(gòu)造函數(shù)沒有返回值,且與類同名。清單7-1是一個關(guān)于類的例子。
清單 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"包括:一個構(gòu)造函數(shù),一個實例方法,以及一個析構(gòu)函數(shù),還包括一個域名"myString"。構(gòu)造函數(shù)是用來初始化類的數(shù)據(jù)成員的。本例中,OutputClass類的構(gòu)造函數(shù)接收一個字符串參數(shù),并把它拷貝到該類的myString域中。
2.構(gòu)造函數(shù)并不是一定要用戶自己定義的,例如ExampleClass類就用到了缺省的構(gòu)造函數(shù)。
缺省的構(gòu)造函數(shù)很簡單,且不帶參數(shù)。但這樣的構(gòu)造函數(shù)并沒有多大用處。為了使得缺省的構(gòu)造函數(shù)能夠有些用途,用戶自己可以對它初始化。例如:
public OutputClass() : this("Default Constructor String") { }
這種形式的構(gòu)造函數(shù)可以包含在清單7-1中的OutputClass類中。該缺省的構(gòu)造函數(shù)后跟著初始化符。分號":"標(biāo)志著初始化開始,后面的"this"是關(guān)鍵字,表示OutputClass這個類所對應(yīng)的對象。this可以有效地調(diào)用該對象中的構(gòu)造函數(shù)。"this"關(guān)鍵字后面的參數(shù)為字符串類型。上面的初始化工作調(diào)用了OutputClass構(gòu)造函數(shù),該構(gòu)造函數(shù)接收一個字符串類型的數(shù)據(jù)作為參數(shù)。初始化工作確保在類的域能夠在類的實例化過程中被初始化。
上面的例子表明:一個類可以有多種格式的構(gòu)造函數(shù)。具體調(diào)用哪一種構(gòu)造函數(shù)取決于參數(shù)個數(shù)及參數(shù)類型。
類成員的類型
在C#中,有兩種類型的類成員,實例和靜態(tài)的。每次定義類的對象時,就創(chuàng)建了該類的一個實例。ExampleClass中的 Main() 方法創(chuàng)建了OutputClass類的一個名為"outCl"的實例。你可以用不同的名字創(chuàng)建OutputClass類的多個實例。這些實例都是各自獨立的。例如,OutputClass類的兩個實例創(chuàng)建如下:
OutputClass oc1 = new OutputClass("OutputClass1");
OutputClass oc2 = new OutputClass("OutputClass2");
于是,創(chuàng)建了OutputClass類的兩個單獨的實例,且各自帶有單獨的"myString"域和"printString()"方法。上例中,兩個實例名為"oc1" 和"oc2"。 另外一方面,如果類成員是靜態(tài)的,可以通過如下格式來訪問: <classname>.<static class member>。
一旦OutputClass類有如下的靜態(tài)方法:
static void staticPrinter() {
Console.WriteLine("There is only one of me.");
}
你就可以用下面的方式,從Main()中調(diào)用該函數(shù):
OutputClass.staticPrinter();
注意:
調(diào)用類的靜態(tài)成員必須通過類名而不是實例名。類的靜態(tài)成員的副本僅有一個。
另外一種類型的構(gòu)造函數(shù)是靜態(tài)構(gòu)造函數(shù)。 通過在構(gòu)造函數(shù)名稱的前面使用關(guān)鍵字"static",就可以定義一個靜態(tài)的構(gòu)造函數(shù)。 調(diào)用靜態(tài)的構(gòu)造函數(shù)的發(fā)生時間是:在創(chuàng)建類的實例之前 ,在調(diào)用類的靜態(tài)成員之前,在調(diào)用派生類的靜態(tài)構(gòu)造函數(shù)之前。(在后續(xù)課程中將介紹),且僅被調(diào)用一次。
OutputClass也有一個析構(gòu)函數(shù),除了前面加上了"~"符號,就跟構(gòu)造函數(shù)的格式一樣。析構(gòu)函數(shù)用于釋放類所占用的資源。當(dāng)C#垃圾搜集器決定把對象從內(nèi)存中清除出去時,就會調(diào)用析構(gòu)函數(shù)。
小結(jié)
現(xiàn)在,你已經(jīng)了解了類的如下成員:域,方法,構(gòu)造函數(shù),析構(gòu)函數(shù)。下面是類的完整的成員類型:
構(gòu)造函數(shù);析構(gòu)函數(shù);域;方法;屬性;索引;代理 ;事件;嵌套類
上面沒有介紹過的類型將在后續(xù)課程中講解。
概括地講,你現(xiàn)在已經(jīng)學(xué)會了如何定義常規(guī)的和靜態(tài)的構(gòu)造函數(shù),也了解了如何初始化類的域。如果沒有必要實例化一個對象,可以創(chuàng)建靜態(tài)的類成員。你也了解了用來釋放資源的析構(gòu)函數(shù)的用法?
?
總結(jié)
- 上一篇: 花草达人来帮我看看这是什么草啊?
- 下一篇: C#属性