从派生类设置基类的默认属性

时间:2017-02-08 14:41:08

标签: c# inheritance

好的,我遇到了一个感兴趣且可能很简单的问题。我有一个由另一个类(子)继承的基类。我在base和child中有相同的无参数构造函数。我想在子项中设置传播到基本属性中的默认值。我想做这样的事情:

public partial class baseclass
{
    public baseclass() {
        //never called if instantiated from baseclass(string newp1)
        p1 = "";
        p2 = "google";
    }

    public baseclass(string newp1) {
        p1 = newp1; //p2 will be "" and p1 will be newP1
    }

    public string p1 { get; set; }
    public string p2 { get; set; }
}

public partial class childclass : baseclass
{
    public childclass() { 
        //How can I call this to set some default values for the child?
        p2 = "facebook";
    }

    public childclass(string newp1) : base(newp1) {
        p1 = newp1; //p2 needs to be "facebook"
    }

}

2 个答案:

答案 0 :(得分:1)

如果在多个构造函数中有重复的代码,请使用构造函数链接:

public class baseclass
{
    public baseclass() : this("google") { }
    public baseclass(string newp1)
    {
       p1 = newp1; // the only place in your code where you init properties
       p2 = "";
    }

    public string p1 { get; set; }
    public string p2 { get; set; }
}

子类应该继承baseClass

public class childclass : baseclass
{
    public childclass() : this("facebook") { } // you can also call base here
    public childclass(string newp1) : base(newp1) { }
}

另请注意,parital只允许您在几个部分中拆分类/方法定义(例如,将其保存在不同的文件中)。当您生成类(例如,来自数据库表)但仍希望在生成的类中添加/自定义某些内容时,它非常有用。如果您将自定义代码直接放入生成的文件中,那么在重新生成类后它将丢失。 Read more

答案 1 :(得分:0)

您可以在基类中创建受保护的构造函数,并在子类中调用它:

    public class Base
    {
       public Base(int value1, int value2) { ... }
       protected Base(string value1) { ... } // only for child class
    }

    public class Child : Base
    {
       public Child() : Base("Value") { ... }
    }