好的,我遇到了一个感兴趣且可能很简单的问题。我有一个由另一个类(子)继承的基类。我在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"
}
}
答案 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") { ... }
}