Constructor in C#

别等时光非礼了梦想. 提交于 2019-12-10 18:32:04

问题


I have a parent class with 2 constructor and the derived class trying to call the constructor of parent in 2 different methods

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

Now I have a derived class with two methods. I Have to use Parent-constructor in one method and the Parent(string st) in other method. But here It is always calling the Parent-constructor. Below is the derived class

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);
    }
}

Please let me how to make this happen. Thanks in advance.


回答1:


Just have two constructors in your Derived class that use the appropriate constructor in the base.

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

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

The :base() nomenclature will invoke the parent constructor.




回答2:


Use the parent constructor call "base"

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
}

Your error comes because you're instanciate a new Object Parents in your Child. With Base(), you call the parent constructor without instanciate him.




回答3:


Calling new Derived() will call the Parent() ctor because it inherits from Parent and has an implicit Derived() : base().

After you have constructed Derived() calling the method (not constructor) GetData1() will call the Parent(string st) constructor

These are completely separate routes of constructing parent and it seem you are confusing them




回答4:


The Parent() constructor is always called because you Derived derives from Parent but doesnt include a constructor, hence a default constructor is created, which calls the parameterless parent constructor.

The call to Parent p = new Parent(s); will call the constructor of Parent that takes a parameter.

If you want to call the parent constructor when creating a Derived object, you have to chain the constructors using base().

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

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


来源:https://stackoverflow.com/questions/33693253/constructor-in-c-sharp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!