2012-06-25 2 views
1

Я получил эту ошибку, когда я программировать на C#: «BankSystem.Account» не содержит конструктор, который принимает аргументы 0Не имеет Constructer, которые принимают 0 аргументы в C#

Мои классы:

Во-первых, класс счета:

public abstract class Account : IAccount 
{ 

    private static decimal minIncome = 0; 
    private static int minAge = 18; 

    private string name; 
    private string address; 
    private decimal age; 
    private decimal balance; 

    public Account(string inName, decimal inAge, decimal inBalance, string inAddress) 
    { 
     if (AccountAllowed(inBalance, inAge)) 
     { 
      name = inName; 
      address = inAddress; 
      balance = inBalance; 
      age = inAge; 

      Console.WriteLine("We created the account. \nName is " + name + " \nThe address is: " 
      + address + "\nThe balance is " + balance); 

     } 
     else 
     { 
      Console.WriteLine("We cann't create the account. Please check the balance and age!"); 
     } 
    } 

    //public CustomerAccount(string newName, decimal initialBalance) 

    public Account(string inName, decimal initialBalance) 
    { 
    } 

Во-вторых, класс УЧЁТНАЯЗАПИСЬ:

public class CustomerAccount : Account 
{ 
    private decimal balance = 0; 
    private string name; 

    public CustomerAccount(string newName, decimal initialBalance) 
    { 
     name = newName; 
     balance = initialBalance; 
    } 

    public CustomerAccount(string inName, decimal inAge, decimal inBalance, string inAddress) 
     : base(inName, inAge) 
    { 

     // name = inName; 
     //age = inAge; 
    } 

    public CustomerAccount(string inName, decimal inAge) 
     : base(inName, inAge) 
    { 

     // name = inName; 
     //age = inAge; 
    } ...... 
+0

Вам нужно будет показать нам больше кода, чем это. Ошибка звучит так, будто вы пытаетесь вызвать одну из функций, не передавая ей ничего. –

+9

Сообщение об ошибке содержит ответ. – Ben

+3

Вы не в RBS, не так ли? ;-) Если вы вызываете конструктор 2-го параметра на CustomerAccount, как он получается из учетной записи, он будет пытаться вызвать base(). Поскольку у вас нет конструктора без параметров на базе, учетной записи, ваш код не работает. – dash

ответ

7

Поскольку вы определили конструкторы с параметрами в своем классе, вы по умолчанию не получите конструктор по умолчанию.

Ваш класс учетной записи, определенные Конструкторы:

public Account(string inName, decimal inAge, decimal inBalance, string inAddress) 
public Account(string inName, decimal initialBalance) 

вы можете определить конструктор по умолчанию, как.

public Account() 
{ 
} 

Ошибка вы получаете потому, что ваш ниже конструктор CustomerAccount неявно вызова конструктора по умолчанию для базового счета класса, как вы не указали какой-либо другой базовый конструктор, например, :base(arg1,arg2);

public CustomerAccount(string newName, decimal initialBalance) 
    { 
     name = newName; 
     balance = initialBalance; 
    } 

выше такой же, как:

public CustomerAccount(string newName, decimal initialBalance) : base() 
+0

Но я не использую конструктор по умолчанию в своем коде! Как это происходит? –

+0

@AliEssa Фактически ваша строка 'public CustomerAccount (строка newName, decimal initialBalance)' неявно вызывает базовый конструктор по умолчанию, поскольку, как указывает Habib.OSU, вы не вызывали конкретный базовый конструктор. –

+0

http://msdn.microsoft.com/en-us/library/ms173115.aspx: «В производном классе, если конструктор базового класса не вызывается явно, используя ключевое слово base, конструктор по умолчанию, если есть один, называется неявным ». –

1

Вы инициализирует свой Account класс, как этот

new Account(); 

, но должны делать

new Account("name", ...); 

в соответствии с вашим определением конструктора.

+0

Хорошо спасибо. Я понял. –

7

Вы должны 'цепь' в базовый конструктор здесь:

public CustomerAccount(string newName, decimal initialBalance) 
    : base(newName, 0) // something like this 
{ 
    name = newName; 
    balance = initialBalance; 
} 
4

Simple. Класс Account не содержит конструктора с нулевыми аргументами, например.

public Account() 
{ 

} 

Ответ указан в сообщении об ошибке.

Когда вы создаете новый экземпляр прохода класса Account с правильными параметрами, например.

Account account = new Account("John Smith", 20.00);

Или создать конструктор, который принимает нулевые аргументы.

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