【问题标题】:What does 'this' mean in a c# constructor? [duplicate]c# 构造函数中的“this”是什么意思? [复制]
【发布时间】:2015-02-27 15:01:01
【问题描述】:

我对 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)

【问题讨论】:

标签: c# constructor this


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在这里的上下文中,它的意思是“当构造函数public BankAccount()被调用时,执行另一个构造函数,匹配签名。0匹配public BankAccount(decimal initialBalance),导致该构造函数也被调用。

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

    【讨论】:

      【解决方案3】:

      表示构造函数调用了同一个类的另一个构造函数。 调用哪个构造函数取决于 int 签名。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-25
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 2015-05-01
        • 2012-07-01
        • 2021-09-12
        • 2020-03-27
        相关资源
        最近更新 更多