看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...