这个'是什么?在c#构造函数中意味着什么?

时间:2015-02-27 15:01:02

标签: c# constructor this

我是c#的新手,我正在写一本教科书。 教科书显示了这段代码:

public class BankAccount
{
    // Bank accounts start at 1000 and increase sequentially.
    public static int _nextAccountNumber = 1000;
    // Maintain the account number and balance for each object.
    public int _accountNumber;
    public decimal _balance;
    // Constructors
    public BankAccount() : this(0)
    {
    }
    public BankAccount(decimal initialBalance)
    {
        _accountNumber = ++_nextAccountNumber;
        _balance = initialBalance;
    }
     // more methods...

我无法理解这一点:

public BankAccount() : this(0)
{
}

看起来像继承的语法,但我想这不是因为this(0)不是一个类。我认为继承正在使用的同一个类是不合逻辑的。它可能是一个构造函数,语法让我感到困惑。

this(0)是什么意思?为什么要使用this,是否还有其他方式来编写它?

这是否相同?:

public BankAccount()
{
  BankAccount(0);
}

我理解以下内容:

public BankAccount(decimal initialBalance)
    {
        _accountNumber = ++_nextAccountNumber;
        _balance = initialBalance;
    }

它似乎是一个接受余额值的构造函数,并设置帐号。

我的猜测是this(0)实际上只是执行BankAccount(0)。如果这是真的,为什么还要写两个构造函数呢? BankAccount(0)似乎工作正常。

有人可以用简单的方式解释this的内容(c#的新内容;来自python)

3 个答案:

答案 0 :(得分:4)

您的猜测是正确的,this(0)正在调用BankAccount(decmial)构造函数。

您可能创建两个的原因是为您的班级的消费者提供一个选择。如果他们有值,他们可以使用BackAccount(decimal)构造函数,如果他们不在乎他们可以使用BankAccount()构造函数保存几秒钟,它会将余额初始化为合理的值。此外,如果您想更改默认设置,可以在一个地方进行更改。

答案 1 :(得分:3)

在此处的上下文中,它表示"当调用构造函数public BankAccount()时,执行与签名匹配的其他构造函数。 0匹配public BankAccount(decimal initialBalance),导致也调用该构造函数。

关键字this也可以应用于其他上下文,但它始终引用该类的当前实例。这也意味着它不存在于静态类中,因为它们没有被实例化。

答案 2 :(得分:2)

这意味着构造函数调用同一个类的另一个构造函数。 调用哪个构造函数取决于int签名。

在这种情况下,this(0)将调用唯一匹配的构造函数BankAccount(decimal initialBalance),因为0可以作为decimal传递。