C 基礎知識系列五 建構函式

2021-06-28 01:24:26 字數 2399 閱讀 9512

前言本節主要來學習下例項建構函式、私有建構函式和靜態建構函式。

建構函式的作用:

1、當乙個類在new例項化物件時,可呼叫建構函式進行初始化物件。

2、不帶引數的建構函式稱為「預設建構函式」。 

無論何時,只要使用 new

運算子例項化物件,並且不為 new

提供任何引數,就會呼叫預設建構函式。除非類是static的,否則 c# 編譯  器將為無建構函式的類提供乙個公共的預設建構函式,以便該類可以例項化。

3、通過將建構函式設定為私有建構函式可以阻止類被例項化。

4、結構型別的建構函式與類的建構函式類似,但是 structs 不能包含顯式預設建構函式,因為編譯器將自動提供乙個建構函式。此建構函式會將struct中的每個字段初始化為預設值。   只有當 struct 用 new 例項化時,才會呼叫此預設建構函式。

例項建構函式

使用 new 表示式建立某個類的物件時,會使用例項建構函式建立和初始化所有例項成員變數。 要初始化靜態類或非靜態類中的靜態變數,必須定義靜態建構函式。

class

coords

}

只要建立基於 coords 類的物件,就會呼叫此例項建構函式。 

諸如此類不帶引數的建構函式稱為「預設建構函式」。

然而,提供其他建構函式通常十分有用。

例如,可以向 coords 類新增建構函式,以便可以為資料成員指定初始值:

public coords(int x, int

y)

這樣便可以用預設或特定的初始值建立 

coord

物件,如下所示:

coords p1 = new

coords();

coords p2 = new coords(5, 3);

如果某個類沒有建構函式,則會自動生成乙個預設建構函式,並使用預設值來初始化物件字段。

也可以用例項建構函式來呼叫基類的例項建構函式。 

類建構函式可通過初始值設定項來呼叫基類的建構函式,如下所示:

abstract

class

shape

public

abstract

double

area();

}class

circle : shape

public

override

double

area()

}

在此示例中,

circle

類將表示半徑和高度的值傳遞給 

shape

(circle

從它派生而來)提供的建構函式。

私有建構函式

私有建構函式是一種特殊的例項建構函式。 

它通常用在只包含靜態成員的類中。

如果類具有乙個或多個私有建構函式而沒有公共建構函式,則其他類(除巢狀類外)無法建立該類的例項。

例如:

class

nlog

public

static

double e = math.e; //

2.71828...

}

宣告空建構函式可阻止自動生成預設建構函式。 注意,如果您不對建構函式使用訪問修飾符,則在預設情況下它仍為私有建構函式。 但是,通常顯式地使用 private 修飾符來清楚地表明該類不能被例項化。

當沒有例項欄位或例項方法(如 math 類)時或者當呼叫方法以獲得類的例項時,私有建構函式可用於阻止建立類的例項。 如果類中的所有方法都是靜態的,可考慮使整個類成為靜態的。

下面是使用私有建構函式的類的示例:

public

class

counter

public

static

intcurrentcount;

public

static

intincrementcount()

}class

testcounter

", counter.currentcount);

console.writeline(

"press any key to exit.");

console.readkey();}}

注意,如果您取消注釋該示例中的以下語句,它將生成乙個錯誤,因為該建構函式受其保護級別的限制而不可訪問:

//

counter acounter = new counter();

//error

靜態建構函式

靜態建構函式用於初始化任何 靜態 資料,或用於執行僅需執行一次的特定操作。 在建立第乙個例項或引用任何靜態成員之前,將自動呼叫靜態建構函式。

class

******class

}

靜態建構函式具有以下特點:

c 基礎知識 建構函式的用法

類的建構函式是類的乙個特殊的成員函式,當建立類的新物件時執行。建構函式的名稱與類的名稱完全相同,它沒有任何返回型別。下面的例項說明了建構函式的概念 using system namespace public void setlength double len public double getlen...

PHP基礎知識建構函式

php基礎知識建構函式 created by phpstorm.user administrator date 2016 7 16 0016 time 15 05 header content type text html charset utf 8 class site 析構函式 public f...

java基礎知識之建構函式

子父類中的建構函式。在對子類物件進行初始化時,父類的建構函式也會執行,那是因為子類的建構函式預設第一行有一條隱式的語句 super super 會訪問父類中空引數的建構函式。而且子類中所有的建構函式預設第一行都是super 為什麼子類一定要訪問父類中的建構函式。因為父類中的資料子類可以直接獲取。所以...