2015-11-13 4 views
3

У меня есть родительский класс с 2-конструктором и производный класс пытается вызвать конструктор родителя в 2-х различных методовКонструктор в C#

public class Parent 
{ 
    public Parent() 
    { 
     //some stuffs 
    } 
    public Parent(string st) 
    { 
     //some stuffs 
    } 
} 

Теперь я производный класс с двумя методами. Я должен использовать Parent -конструктор одним способом и Parent(string st) другим способом. Но здесь он всегда вызывает Parent -конструктор. Ниже приведен производный класс

public class Derived : Parent 
{ 
    public void GetData() 
    { 
     //Here I initialize the constructor like this 
     Parent p = new Parent(); 
    } 

    public void GetData1() 
    { 
     string s = "1"; 
     Parent p = new Parent(s); 
    } 
} 

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

+1

Вы не наследуете родителя, вы создаете экземпляр. Узнайте, как вызвать родительский конструктор здесь: http://stackoverflow.com/questions/12051/calling-the-base-constructor-in-c-sharp – steenbergh

+1

Почему вы создаете новый экземпляр? У вас уже есть один. Если yu создал 'GetData' static, это был бы заводский метод, который возвращает экземпляр. Но в настоящее время это бессмысленно. –

+0

@steenbergh Тим прав, ваш код как есть, бессмысленно выводить из 'Parent', но вы код вызывает перегрузку конструктора, которая берет строку. Почему вы думаете, что это не так? Поместите в этот конструктор 'Console.WriteLine', вы увидите, что он работает. – Crowcoder

ответ

1

Вызов new Derived() вызовет родительский() ctor, поскольку он наследует от родителя и имеет неявный Derived() : base().

После того как вы построили Derived() вызывая метод (не конструктор) GetData1() будет называть Parent(string st) конструктору

Это совершенно отдельные маршруты построения родителей и, кажется, вы путаете их

1

Parent() конструктор всегда потому что вы производны от Parent, но не содержит конструктора, поэтому создается default constructor, который вызывает без параметров parent constructor.

Звонок Parent p = new Parent(s); вызовет конструктор Parent, который принимает параметр.

Если вы хотите позвонить parent constructor при создании объекта Derived, вам необходимо связать конструкторы с помощью base().

public class Derived : Parent 
{ 
    public void Derived() 
    : base() 
    { 
     //code 
    } 

    public void Derived(string s) 
     :base(s) 
    { 
     //code 
    } 
} 
5

Просто у вас есть два конструктора в классе Derived, которые используют соответствующий конструктор в базе.

public class Derived : Parent 
{ 
    public Derived() : base() 
    { 
    } 

    public Derived(string s) : base(s) 
    { 
    } 
} 

:base() номенклатура будет вызывать родительский конструктор.

2

Используйте родительский конструктор вызов «базовый»

public class Parent { 
    public Parent() {} 
    public Parent(string s) {} 

}

public class Child : Parents { 
    public Child():base() // Call Parent empty constructor 

    public Child(string s): base(s) // Call Parent Constructor with parameter 
} 

Вашей ошибка приходит потому, что вы создание экземпляра новых родителей объекта в ребенке. С помощью Base() вы вызываете родительский конструктор, не инициируя его.

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