看C#進階程式設計中關于類的構造函數時候碰到BASE和THIS不懂 看了下這篇文章,不錯!
代碼最具有說服性了,看下面代碼吧:
//代碼段一
public class ConstructorProgram1
{
private string name;
public ConstructorProgram1()
{
Console.WriteLine("No Info Left");
}
public ConstructorProgram1(string name)
this.name = name;
Console.WriteLine("name=" + this.name);
}
}
這裡我重載了另外一個構造函數,裡面的this作為一個指針訓示了一個類的引用。即是ConstructorProgram1類的引用。這個很簡單,但不是重點。
這篇文章最重點要說一下:this和base在構造函數中扮演的角色。
看下面的代碼:
public class ConstructorProgram
private string name;
private int age;
public ConstructorProgram():this("bell")
{
//Console.WriteLine("No Info Left.");
}
public ConstructorProgram(string name)
:this("Simple Programmer",20)
{
this.name = name;
Console.WriteLine("name=" + this.name);
}
public ConstructorProgram(string name, int age)
this.age = age;
Console.WriteLine("age=" + this.age);
public static void Main()
ConstructorProgram cp1= new ConstructorProgram("goal");
ConstructorProgram cp2 = new ConstructorProgram();
運作結果:
name=Simple Programmer
age=20
name=goal
name=bell
在上面的代碼當中,可以看出來這裡紅色字型的this用來調用ConstructorProgram類的自身的構造函數。明白這句話的涵義,應該會明白執行結果了。
接着下面的代碼如下:
public class ConstructorProgram1
private int age;
public ConstructorProgram1(string name, int age)
this.age = age;
Console.WriteLine("age=" + this.age);
public class ConstructorProgram : ConstructorProgram1
public ConstructorProgram()
//Console.WriteLine("sdfsdf");
public ConstructorProgram(string name)
: base("goalbell",20)
Console.WriteLine("name=" + name);
public static void Main()
ConstructorProgram cp = new ConstructorProgram("Programmer");
運作結果如下:
name=goalbell
name=Programmer
可以看出上面的代碼,派生類中的base調用了父類(基類)的構造函數了,但是如果不提供初始化(即把 : base("goalbell",20)
不要)指向基類的構造函數的話,它會執行基類中沒有參數的構造函數。
會得到如下結果:
No Info Left
也就是說BASE是對父類的引用,而THIS是對類本身自己的引用。
在看下下面的代碼
using System;
namespace Zjw.Csharp
{
}
public class ConstructorProgram:ConstructorProgram1
Console.ReadLine();
}
執行結果是