C # в VS2005: в унаследованном классе, вам нужно явно вызвать супер-конструктор? - PullRequest
1 голос
/ 29 июня 2010

Если вы создаете унаследованный класс в C # (VS2005), нужно ли вам явно вызывать конструктор более высокого класса или он будет вызываться автоматически?

Ответы [ 3 ]

3 голосов
/ 29 июня 2010

Конструктор по умолчанию (без параметров) будет автоматически вызываться, если он не указан.

Другими словами, это эквивалент :

public Foo() : base() {}

и

public Foo() {}

при условии, что база Foo имеет конструктор без параметров.

С другой стороны, если база only имеет конструктор с такими параметрами:

protected MyBase(IBar bar) {}

затем

public Foo() {}

не будет не компилироваться .В этом случае вы должны явно вызвать базу с соответствующим параметром - например,

public Foo(IBar bar) : base(bar) {}
0 голосов
/ 29 июня 2010

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

Пример кода:

public class ClassA
    {

        protected bool field = false;

        public ClassA()
        {
            field = true;
        }
    }

    public class ClassB : ClassA
    {
        public ClassB()
        {
        }

        public override string ToString()
        {
            return "Field is " + field.ToString();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ClassB target = new ClassB();

            Console.WriteLine(target.ToString());

            Console.ReadKey();
        }
    }

Это покажет, что значение 'field' установлено вtrue, хотя конструктор ClassA не был явно вызван ClassB.

0 голосов
/ 29 июня 2010

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

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