2012-03-16 2 views

ответ

0

В производных классах конструктора, вам нужно будет назвать базовый конструктор так:

base(param1,param2,...) 

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

2

Doing ваш конструктор защищен будут делать то набить

public abstract class A 
{ 
protected A(string v) { V = v; } 
public string V { get; protected set; } 
} 

public class AA : A 
{ 
public AA(string v) : base (v) {} 
} 
+2

Я думаю, что ОП пытается избежать реализации конструктора с той же подписью. Вы не можете наследовать конструкторы в C#. звоните только из базы (как и в вашем коде) –

+0

Лично я считаю, что это один из самых больших сбоев в C#. Каждый публичный метод, объявленный в базовом классе, автоматически используется в производных классах, но все конструкторы должны быть явно определены. Я проклинаю команду C# каждый раз, когда мне приходится писать тот же конструктор, который просто вызывает базовую реализацию. – adelphus

2

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

abstract class B 
{ 
    protected B() 
    { 
     ... 
    } 

    protected B(object foo) 
    { 
     ... 
    } 
} 

class D : B 
{ 
    public D() 
     : base() // not actually necessary, since it's called implicitly 
    { 
    } 

    public D(object foo) 
     : base(foo) 
    { 
    } 
} 
+0

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

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