上下文:c#中變數的內斂賦值其實是在建構函式中完成的,jit會把變數的賦值語句放入每個建構函式開始的位置,因此,當類中有很多變數使用內聯賦值,同時類也有多個建構函式的時候,實際編譯生成的**量會以乘法的方式疊加。比如乙個類中有3個變數使用內聯賦值,有4個建構函式,那麼實際生成的賦值語句的數量將達到3x4=12句。
結論:盡量避免使用內聯賦值,優先使用建構函式內賦值
類**如下:
public class cat
public cat(string _name)
public cat(int _notuse)
public void shout()
} il生成的**如下:
//public cat(string _name)
.method public hidebysig specialname rtspecialname
instance void .ctor(string _name) cil managed
// end of method cat::.ctor
//public cat(int _notuse)
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 _notuse) cil managed
// end of method cat::.ctor
//public cat()
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
// end of method cat::.ctor
從上面3個建構函式的il**可以看出,當變數不使用內聯賦值的時候,建構函式內不會自行補充賦值語句
下面將貼上內聯賦值的cat
public class cat
public cat(string _name)
public cat(int _notuse)
public void shout()
} 其建構函式分別是:
.method public hidebysig specialname rtspecialname
instance void .ctor(string _name) cil managed
// end of method cat::.ctor
其他建構函式中同樣會增加賦值的那三句
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 _notuse) cil managed
// end of method cat::.ctor
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
// end of method cat::.ctor
C 賦值建構函式 複製建構函式
編譯器提供乙個不接受任何引數,也不執行任何操作的建構函式,稱之為預設建構函式 這是因為創造物件的時候總會呼叫預設建構函式 klunk klunk 定義 klunk lunk 宣告 使用預設建構函式 如果定義了建構函式,c 不會定義預設建構函式,如果希望建立物件時不顯示地對他進行初始化,則必須顯示的定...
c 中內斂函式 C 內聯函式
內聯函式是指用inline關鍵字修飾的函式。在類內定義的函式被預設成內聯函式。實質就是當需要呼叫乙個內聯函式時,不是去呼叫而是將該函式 整段插入到需要使用該內聯函式的地方,從而省去呼叫過程,提高了執行速度。缺點由於每當 呼叫到內聯函式,就需要在呼叫處直接插入一段該函式的 所以程式的體積將會增大,消耗...
C 中的拷貝構造 賦值建構函式
c 中的拷貝構造,賦值構造的形式如下 eg a a a a const a a a operator const a a 物件以值傳遞方式從函式返回時,若接受返回值的物件已經初始化過,則會呼叫賦值建構函式,且該物件還會呼叫析構函式,當物件中包含指標時,會使該指標失效,因此需要過載賦值建構函式,使用類...