构造函数带有this和base的作用

        #region "Constructor"
/// <summary>
/// 构造函数
/// </summary>
public NavigationUrl()
: this(string.Empty, string.Empty, string.Empty, BtnType.Href, false)
{

}

/// <summary>
/// 重载构造函数
/// </summary>
/// <param name="bText">按钮的文字</param>
/// <param name="bUrl">按钮的javascript/vbscript的Onclick字符</param>
/// <param name="bHint">按钮提示信息</param>
/// <param name="bType">按钮链接类型</param>
/// <param name="bDefault">是否默认选中当前按钮</param>
public NavigationUrl(string bText, string bUrl, string bHint, BtnType bType, bool bDefault)
{
_btnText = bText;
_btnUrl = bUrl;
_btnHint = bHint;
_btnType = bType;
_btnDefaultSelect = bDefault;
}
#endregion

 base是调用基类的构造方法,而this是调用类自身的构造方法。

上面的例子中,当调用第一个构造函数时,执行完继续执行第二构造函数。

构造函数中base与this的区别:

namespace ConsoleApplication1
{
class A
{
private int x;

public A()
{
Console.WriteLine("this is class A no arg here, value:{0}", x);
}

public A(int i)
{
x = i;
Console.WriteLine("this is class A one arg here, value:{0}", x);
}
}

class B : A
{
private int y;

public B()
{
y = 1;
Console.WriteLine("this is class B no arg here, value:{0}", y);
}

public B(int i)
{
y = i;
Console.WriteLine("this is class B one arg here, value :{0}", y);
}

public B(int i, int b)
: base(i)
{
y = b;
Console.WriteLine("this is class B two arg here, value:{0}", y);
}
}

class Program
{
static void Main(string[] args)
{
B s = new B(5, 8);
Console.ReadLine();
}
}
}

上面例子输出的结果是:

this is class A one arg here, value:5

this is class B two arg here, value:8

如果把base换成this, 结果是:

this is class A no arg here, value:0

this is class B one arg here, value:5

this is class B two arg here, value:8

可见:base是调用基类的构造方法,而this是调用类自身的构造方法。如果用base的时候调用的不是基类无参构造函数,那么在初始化的时候基类中的无参构造函数也会自动初始化。

原文地址:https://www.cnblogs.com/xiaocai0923/p/2226485.html