2016-08-25 6 views
0

У меня есть частный тип, который должен быть создан в конструкторе. У меня есть базовый конструктор, а другой - с параметрами. Я сохранил экземпляр в базе и только назначение переменной в параметризованном конструкторе. Но это не работает.Базовый конструктор не выполняется

Это не работает.

public class MainClass 
{ 
    private MyType myType = null; 
    private string myParm = string.Empty; 

    private MainClass() 
    { 
     myType = new MyType(); 
    } 

    public MainClass(string inParm) : base() 
    { 
     myParm = inParm; 
    } 
} 

Ниже работает,

public class MainClass 
{ 
    private MyType myType = null; 
    private string myParm = string.Empty; 

    private MainClass() 
    { 
    } 

    public MainClass(string inParm): base() 
    { 
     myType = new MyType(); 
     myParm = inParm; 
    } 
} 

MyType не инициализируется при хранении в базе конструктора

+0

'базовый()' для вызова конструктора родительского класса, который является 'object' для этого класса. 'object' ничего не знает о' myType'. Вы, вероятно, ищете 'this()' вместо этого. –

+0

Я понимаю сейчас. Спасибо, что объяснил это. – Sekar

ответ

7

вы хотите this() не base(). Вы хотите, чтобы вызвать конструктор в том же классе, а не его базовый класс:

public MainClass(string inParm) : this() 
{ 
    myParm = inParm; 
} 

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

Но ваш базовый класс Object, поэтому не нужно беспокоиться об этом.

+0

Спасибо, сработало. – Sekar

3

Вы должны вызвать this() не base(), потому что вы не вызывая родительский конструктор:

public class MainClass 
{ 
    private MyType myType = null; 
    private string myParm = string.Empty; 

    private MainClass() 
    { 
     myType = new MyType(); 
    } 

    public MainClass(string inParm) 
     : this() 
    { 
     myParm = inParm; 
    } 
} 
+0

Спасибо, что сработало – Sekar

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