首先要明确: this指向的本实例的构造函数,base指向的时基类的构造函数。
再执行顺序上,a、this表明,在执行本构造函数之前,先执行this指向本实例的构造函数,再执行本函数。
b、base表明,在执行本构造函数之前,先执行base指向的基类的构造函数,再执行本函数。
示例demo:
创建两个 类,一个 One(基类),Two(继承自One)。
using
System;
namespace
cSharp
{
class
Program
{
static
void
Main(
string[] args)
{
One oneObj =
new
One();
Console.
WriteLine(
"---------------------------------");
Two twoObj =
new
Two();
Console.
ReadKey();
}
}
class
One
{
public
string Name{
set;
get;}
public
int Age{
get;
set; }
public
bool Sex{
get;
set;}
public
One(
string name,
int age,
bool sex)
{
Console.
WriteLine(
"One 调用带参数构造函数");
this.
Name =
name;
this.
Age =
age;
this.
Sex =
sex;
}
public
One():
this(
"默认姓名",
18,
true) //在调用之前首先 调用本实例的 有参数 的构造函数,再执行本构造函数
{
Console.
WriteLine(
"One 调用不带参数构造函数");
}
}
class
Two:
One
{
public
string Like{
get;
set;}
public
Two() :
base() //在调用之前 先调用 基类的 无参数 构造函数,再执行本构造函数
{
Console.
WriteLine(
"two 无参数");
}
public
Two(
string like):
this() //在调用之前先调用 本实例的 无参数的构造函数 。即Two(),再执行本构造函数
{
this.
Like =
like;
}
}
}
运行结果: