Отсутствует аргумент, который соответствует обязательному формальному параметру 'sir' в Money.Money (string) ' - PullRequest
1 голос
/ 07 апреля 2019

Итак, я новичок в C # и объектном программировании, и у меня небольшая проблема.

В базовом классе у меня есть это (который в основном преобразует строку в double []:

namespace PersonalSpendings
{
    class Money
    {
        private decimal money { get; set; }
        public Money(string str)
        {
            //conversion from string to double[]
            int j = 0;
            string[] str2 = str.Split(new char[] { ' ', ',', '.' },         
StringSplitOptions.RemoveEmptyEntries) ;
            double[] strFinal = { '0', '0', '0' };
            foreach(string i in str2)
            {
                strFinal[j] = double.Parse(i);
                j++;
            }
            j--;
        }
    }
}

и я не понимаю, почему он не позволит мне создать еще один конструктор (с другими параметрами):

namespace PersonalSpendings
{
    class Income: Money
    {
        public Income(double amount, string name)
        {

        }
        public Income(string str) : base(str)
        {
        }
    }
}

Имеется проблема с первым конструктором: (двойная сумма, имя строки).

Не могу ли я создать конструкторы, специфичные для моего производного класса?

Ответы [ 2 ]

4 голосов
/ 07 апреля 2019

Да, вы можете, но, поскольку в вашем базовом классе есть только один конструктор с параметром, вам нужно будет вызывать его из любого конструктора в вашем производном классе.

    public Income(double amount, string name) : base(/* something */)
    {

    }
    public Income(string str) : base(str)
    {
    }
2 голосов
/ 07 апреля 2019
public Income(double amount, string name)
{
    ...
}

равно

public Income(double amount, string name) : base() // try to call Money()
{
    ...
}

, потому что каждый конструктор вызывает конструктор базового класса, пока не будет достигнут объект ().Если вы не предоставляете вызов базовому конструктору вручную, компилятор вызывает вызов конструктора без параметров.Таким образом, в вашем коде вы пытаетесь вызвать конструктор без параметров Money (), но у вас его нет.Это проблема.Возможное решение:

public Income(double amount, string name) : base(name)
{
    ...
}

или предоставить Money конструктор без параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...