Почему мы должны передавать значения из конструктора производного класса в конструктор базового класса - PullRequest
0 голосов
/ 13 мая 2018
namespace Sample
{
    public class Program
    {
        static int x;

       public Program(int Y) {  
            x = Y;
           Console.WriteLine("one value base class constructor called");
        }  

        static void Main(string[] args)
        {         
            Program prog = new s(10);           
            Console.ReadKey();
        }
    }

    public class s: Program {

        public s(int k):base(10)
        { 
           Console.WriteLine("derived class constructor called");

        }       
    }
}

Почему конструктор базового класса вызывается первым?Если у меня есть параметризованный конструктор, определенный в базовом классе, то для конструктора производного класса обязательно передать значения конструктору базового класса из производного класса.

Я хотел бы узнать причину, по которой он является обязательным?Если в конструктор базового класса не передаются значения, компилятор выдает сообщение об ошибке: « Нет аргумента, соответствующего необходимому формальному параметру ».

Я не спрашиваю,я не должен передавать значения в базовый класс, но у меня вопрос, почему я должен это делать?Почему конструктор базового класса должен вызываться первым?

1 Ответ

0 голосов
/ 13 мая 2018

Вы ответили на свой вопрос:

Как мы все знаем, конструктор базового класса вызывается перед конструктором производного класса.

Поскольку ваш базовый классиметь только конструктор, который должен принимать параметр, вы должны указать этот параметр при вызове.

Если ваш базовый класс будет иметь конструктор без параметров, тогда компилятор будет доволен public s(int k):base() или даже просто public s(int k) (поскольку base() будет добавлено неявно во время компиляции).

Однако, поскольку вы явно написали конструктор для класса Program, компилятор не предоставляет конструктор по умолчанию без параметров, и поэтому единственный способ создания экземпляра класса Program - это вызовэто всего лишь конструктор и передача соответствующего параметра.

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