建構函式中base和this的用法與區別

2021-06-22 14:28:48 字數 2028 閱讀 2142

看c#高階程式設計中關於類的建構函式時候碰到base和this不懂 看了下這篇文章,不錯!

**最具有說服性了,看下面**吧:

//**段一

public  class constructorprogram1

public constructorprogram1(string name) }

這裡我過載了另外乙個建構函式,裡面的this作為乙個指標指示了乙個類的引用。即是constructorprogram1類的引用。這個很簡單,但不是重點。

這篇文章最重點要說一下:this和base在建構函式中扮演的角色。

看下面的**:

public class constructorprogram

public constructorprogram(string name)

:this("****** programmer",20)

public constructorprogram(string name, int age)

public static void main()

}執行結果:

name=****** programmer

age=20

name=goal

name=****** programmer

age=20

name=bell

在上面的**當中,可以看出來這裡紅色字型的this用來呼叫constructorprogram類的自身的建構函式。明白這句話的涵義,應該會明白執行結果了。

接著下面的**如下:

public  class constructorprogram1

public constructorprogram1(string name)

public constructorprogram1(string name, int age)

}public  class constructorprogram : constructorprogram1

public constructorprogram(string name)

: base("goalbell",20)

public static void main() 

}執行結果如下:

name=goalbell

age=20

name=programmer

可以看出上面的**,派生類中的base呼叫了父類(基類)的建構函式了,但是如果不提供初始化(即把 : base("goalbell",20)

不要)指向基類的建構函式的話,它會執行基類中沒有引數的建構函式。

會得到如下結果:

name=goalbell

age=20

name=programmer

no info left

也就是說base是對父類的引用,而this是對類本身自己的引用。

在看下下面的**

using system;

namespace zjw.csharp

public constructorprogram1(string name)

}public class constructorprogram:constructorprogram1

public constructorprogram(string name)

:this("****** programmer",20)

public constructorprogram(string name, int age)

public static void main()}}

執行結果是

no info left

name=****** programmer

age=20

name=goal

no info left

name=****** programmer

age=20

name=bell

可以得到的結論是   先呼叫父類的建構函式進行初始化,在呼叫繼承類的建構函式,如果沒有在繼承類中指明父類的建構函式,則預設呼叫父類中沒有引數的建構函式,然後呼叫繼承類的建構函式。 

c 建構函式中的this和base

首先要明確 this指向的本例項的建構函式,base指向的時基類的建構函式。再執行順序上,a this表明,在執行本建構函式之前,先執行this指向本例項的建構函式,再執行本函式。b base表明,在執行本建構函式之前,先執行base指向的基類的建構函式,再執行本函式。示例demo 建立兩個 類,乙...

建構函式中base和this的用法與區別

看c 高階程式設計中關於類的建構函式時候碰到base和this不懂 看了下這篇文章,不錯!最具有說服性了,看下面 吧 段一 public class constructorprogram1 public constructorprogram1 string name 這裡我過載了另外乙個建構函式,裡...

C 建構函式,base

using system using system.collections.generic using system.linq using system.text namespace region 第一種情況 public class a public class b a endregion reg...