屬性值的賦值應該在類的建構函式之前還是之後執行?
public class testclass
= 2;
public testclass()
if (testproperty == 2)
}}var testinstance = new testclass() ;
在上面的示例中,testproperty
值在類的建構函式中或在類建構函式之後是1
嗎?
在例項建立中分配屬性值,如下所示:
var testinstance = new testclass() ;
將在建構函式執行後執行。但是,在c#6.0的類'屬性中初始化屬性值,如下所示:
public class testclass
= 2;
public testclass()
}
將在建構函式執行之前完成。
將上述兩個概念結合在乙個示例中:
public class testclass
= 2;
public testclass()
if (testproperty == 2)
}}static void main(string args)
; console.writeline(testinstance.testproperty); //resulting in 1
}
最後結果:
"or shall this be executed"
"1"
說明:
首先將testproperty
值指定為2
,然後執行testclass
建構函式,從而列印出
"or shall this be executed"
然後由於new testclass()
,testproperty
將被指定為1
,使得console.writeline(testinstance.testproperty)
列印的testproperty
的最終值為
"1"
轉
建構函式初始化列表和初始化函式
其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...
初始化列表和建構函式
const的資料成員和需要用初始化列表,不能用普通的建構函式體內部進行初始化,這稱為常資料成員。const 有常引用,常物件,常資料成員,常成員函式 棧區 記憶體由系統來分配和釋放 堆區 記憶體由程式設計師自己來分配和釋放的 全域性區常量區 區 方法 建構函式與類同名 建構函式沒有返回值 建構函式可...
建構函式和初始化表
1.無參構造 預設建構函式 無參並非嚴格的沒有引數的建構函式,而是不需要提供實際引數的建構函式,比如存在有預設引數 integer integer int a 10 也算是預設建構函式,可以無參呼叫。integer p1 new integer integer p2 new integer inte...