Будет 2. Конструкторы выполняются по порядку от базового класса первым до наследуемого класса последним.
Обратите внимание, что инициализаторы (как статические, так и экземпляровые переменные) работают в обратном направлении.
Полная последовательность здесь: http://www.csharp411.com/c-object-initialization/
Первый конструктор базового класса вызывается, за ним следует конструктор производного класса. Результат - 2. Следует явно указать на доступность этой переменной класса. Она защищена, частная или публичная?
Я вижу, что вы изменили ее на публичную, так что это будет 2.
Эта ссылка поможет вам лучше понять конструкторы, как они используются, когда они вызываются, и порядок вызова конструктора, когда вы используете наследование:
http://www.yoda.arachsys.com/csharp/constructors.html
Также вы можете захотеть попробовать это самостоятельно, вы узнаете больше, потренировавшись и написав код, а затем просто прочитав его.
Попробуйте объявить Bar и вывести его значение. Используйте некоторые свойства:
class Foo
{
public int abc;
public Foo()
{
abc = 3;
}
public int ABC
{
get { return abc; }
set { abc = value; }
}
}
class Bar : Foo
{
public Bar() : base()
{
abc = 2;
}
}
class Program
{
static void Main(string[] args)
{
Bar b = new Bar();
Console.WriteLine(b.ABC);
Console.ReadLine();
}
}
Простая распечатка даст искомый результат. Вот вывод:
Неужели вам просто нравится мое пространство имён
:-). Кстати, вы также можете использовать автоматические свойства, чтобы это свойство было просто публичным int ABC {get;set;}.
Если предположить, что вы делаете abc защищенным так, чтобы он компилировался, то будет 2; однако сначала вызывается base()
.
Для таких вещей напишите простое тестовое приложение и установите некоторые точки останова, чтобы найти ответ.
.Переменная abc будет установлена на 3, а затем изменена на 2 (сначала вызывается базовый конструктор)
.Базовым конструктором будет , называемый первым , но этот код не компилируется . Приватные поля недоступны из подклассов. По крайней мере, поле должно быть защищено для использования в подклассе.
Но даже зная это, поведение, которое вы пытаетесь предпринять, сбивает с толку, потому что это удивительно. Просто тот факт, что вы должны были спросить, в каком порядке идут вещи, подразумевает, что они будут запутаны, когда ордер будет забыт.
.Сначала вызывается базовый констуктор, для abc
значение 2.