我对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)
您的猜测是正确的,this(0)
正在调用BankAccount(decmial)
构造函数。
创建两个的原因是为了让类的使用者有一个选择。如果他们有一个值,他们可以使用BackAccount(decimal)
构造函数,如果他们不在乎,他们可以通过使用BankAccount()
构造函数节省几秒钟的时间,它会将余额初始化为一个合理的值。此外,如果您想更改默认值,可以在一个地方进行更改。
在这里的上下文中,它的意思是"当调用构造函数public BankAccount()
时,执行另一个与签名匹配的构造函数。0
与public BankAccount(decimal initialBalance)
匹配,导致该构造函数也被调用。
关键字this
也可以应用于其他上下文,但它总是指类的当前实例。这也意味着它不存在于静态类中,因为它们没有实例化。
这意味着构造函数调用同一类的另一个构造函数。调用哪个构造函数取决于int签名。
在这种情况下,this(0)
将调用唯一匹配的构造函数BankAccount(decimal initialBalance)
,因为0
可以作为decimal
传递。