乙個類繼承自另外乙個類,他們的建構函式改怎麼辦?
首先必須先宣告:建構函式是不能繼承的
我們先看一段**:第一段**沒有建構函式,第二段有乙個,第三段有兩個。從他們的msil可以看出,有幾個建構函式就有幾個.ctor的il函式。
即使你沒有建構函式,編譯器也會呼叫乙個空的建構函式。讓我們仔細瞧瞧msil**:
我們可以看到每個il中都有 instance void [mscorlib]system.object::.ctor()
由此我們可以得出。不管你有幾個構造器,你都必須執行父類的建構函式,才能執行當前建構函式;同樣對於繼承,必須先實現父類的建構函式,才能執行自己的.ctor
如果我們寫乙個空的建構函式 public class sometype }
就是public class sometype } 。這種方法是呼叫(基)類中其他的構造器
(方法一,二 都只有乙個.ctor)
(方法三:有兩個.ctor)
static void main(string args).method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
// end of method program::.ctor
class programstatic void main(string args)
}.method public hidebysig specialname rtspecialname
instance void .ctor(int32 i) cil managed
// end of method program::.ctor
class program首先我們看看乙個關於this()/base() 也就是本構造器呼叫其他構造器的例子,注意呼叫其他構造器在前,再執行自己的**public program(int32 i, int32 j)
static void main(string args)
}.method public hidebysig specialname rtspecialname
instance void .ctor(int32 i,
int32 j) cil managed
// end of method program::.ctor
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 i) cil managed
// end of method program::.ctor
class program三、接下來貼出搞了我一下午的乙個例子。在上篇部落格中講到用范型實現乙個鍊錶。但是那種實現方式中,鍊錶的每個值必須都是同乙個型別,本例中實現任意型別public program(int32 i):this() //構造單個變數
public program(int32 j): this()
public program(string m): this()
static void main(string args)
}
直接貼**,下面解釋
public class basenode這個例子理解了一下午,搞不懂其內部機制,想用msil解釋,看到那些偽彙編頭都大,主要是由於自己的基礎知識不紮實啊!}public class node2:basenode
public node2(t data,basenode bnode):base(bnode)
public override string tostring()
}public class leaderfunction2
}
本例中:第一,注意繼承要實現父類的構造
第二,為什麼這樣寫可以實現:
其實還是和之前的一樣,雖然到了最後node指向最後乙個 node2物件,但是之前的物件都沒有銷毀,位址儲存在下個node2中的basenode.bnoden中。
C 11中繼承建構函式和委派建構函式
1 繼承建構函式 在c 繼承中,我們可能會遇到下面這個例子 class base base char c m c c private int m value char m c class derived public base 那麼如果我們在構造b的時候想要擁有a這樣的構造方法的話,就必須乙個乙個的...
C 中繼承中遇到的建構函式問題
今天在開發時遇到了乙個之前一直以為理所當然的建構函式問題。先給總結 子類在構造時,如果沒有顯式呼叫父類的建構函式,會先呼叫父類的預設建構函式 無引數的 下面給出不同情況的例子 例子一 父類有預設的建構函式,子類的建構函式隨便 include class base class derive publi...
C 繼承建構函式和委派建構函式
如果我們在構造b的時候想要擁有a這樣的構造方法的話,就必須乙個乙個的透傳各個介面,那麼這是很麻煩的derived int va base va derived char c base c 改寫成這樣 使用繼承建構函式 using base1 base1 而且,更神奇的是,c 11標準繼承建構函式被設...