2015-02-27 4 views
2

Я очень новичок в C#, и я работаю через учебник. Учебник показывает этот кусок кода:Что это означает в конструкторе 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#, исходя из питона) ?

+4

Он вызывает другой конструктор – EZI

+1

[this (C# Reference)] (https://msdn.microsoft.com/en-us/library/dk1507sz.aspx) – Plutonix

+1

В C# вы не можете вызвать конструктор из ** body ** другого конструктора. («Будет ли это так же?: пример» – xanatos

ответ

4

Ваша догадка правильная, this(0) звонит конструктор BankAccount(decmial).

Причина, по которой вы можете создать два, - дать потребителю вашего класса выбор. Если они имеют значение, они могут использовать конструктор BackAccount(decimal), если им все равно, они могут сэкономить несколько секунд, используя конструктор BankAccount(), и он инициализирует баланс до разумного значения. Кроме того, если вы когда-либо хотели изменить значение по умолчанию, вы можете сделать это в одном месте.

3

В контексте здесь, это означает, что «когда конструктор public BankAccount() называется, выполнить другой конструктор, соответствующие подписи. В 0 матчи public BankAccount(decimal initialBalance), в результате чего этот конструктор будет называться так же.

Ключевое слово this может применяться и в другом контексте, но всегда ссылается на текущий экземпляр класса. Это также означает, что он отсутствует в статических классах, поскольку они не создаются.

2

Это означает, что конструктор вызывает другой конструктор того же класса. Какой конструктор вызывается, зависит от int-подписи.

В этом случае this(0) будет вызывать только соответствующий конструктор, BankAccount(decimal initialBalance), так как 0 может быть передан как decimal.

Смежные вопросы