C#構造函數和析構函數描述
在向大家詳細介紹C#析構函數之前,首先讓大家了解下C#構造函數,然后全面介紹C#析構函數。
C#構造函數(constructor)包括實例C#構造函數和靜態C#構造函數。C#構造函數與類名相同,且不能有返回值。例:
- class TestClass
- {
- TestClass()
- //實例構造函數:可以訪問靜態成員和實例成員,用于初始化實例成員
- {
- ...
- }
- static TestClass()
- //靜態構造函數:只能訪問靜態成員,用于初始化靜態成員
- {
- ...
- }
- }
類的靜態成員屬于類所有,不必生成實例就可以訪問,它是在載入包含類的應用程序時創建的,但靜態方法不能訪問類的實例變量和方法。通常,靜態變量是在定義時就賦初始值的。
類的實例成員屬于類的實例所有,不創建實例對象就無法對其進行訪問,實例成員可以訪問類的靜態成員和其它實例成員。
- class A
- {
- public A()
- {
- ...
- }
- }
- class B
- {
- public B(): base()
- //調用基類的析構函數
- {
- ...
- }
- }
常量:其值是在編譯時設定的,必須是數值文字。默認狀態下常量是靜態的。例:
- class A
- {
- public const double pi = 3.1415;
- }
常量是編譯時就確定的值,只讀字段是在運行才能確定的值。比如運行時才能確定的屏幕分辨率。只讀字段只能在類的C#析構函數中賦值。靜態只讀字段:
- class A
- {
- public static readonly int ScreenWidth;
- //靜態只讀字段
- static A() //靜態析構函數
- {
- ScreenWidth = 1024;
- //在靜態析構函數中初始化
- }
- }
在類的繼承中,類的C#析構函數是不會被繼承的。一個派生類只能從一個基類繼承,不能同時從多個基類繼承,但可以通過繼承多個接口來達到相同目的。實現多繼承的***方法就是使用接口。例:
- class MyFancyGrid: Control, ISerializable, IDataBound
- {
- ...
- }
【編輯推薦】