子构造函数

时间:2013-03-23 10:59:39

标签: c# object constructor parent-child

好的,所以这个问题已经解决,但所有的解决方案真的只适用于简单的程序,我希望找到一种更有效的方法来做到这一点。所以我假设我有这个代码

public class Parent
{
    int one;
    int two;
    public Parent(int A, int B)
    {
        one = A;
        two = B;
    }
}
public class Child : Parent
{
    int three;
    int four;
    public Child(int C, int D)
    {
        three = C;
        four = D;
    }
}

好的,所以Child拥有所有父变量及其所有新变量(它有int一和二以及三和四)。当我创建一个子对象

Child myChild = new Child(3,4);

我只能输入子构造函数中指定的两个值,我真的需要设置所有四个变量值(父项中的两个值和子项中的两个变量值)。我发现的唯一解决方案是

public class Child : Parent
{
    int three;
    int four;
    public Child(int A, int B, int C, int D) : base(A, B)
    {
        three = C;
        four = D;
    }
}

但是我正在处理几十个子类和大约30个父变量,因此上面的解决方案变得非常大,并且必须在每个子类中手动更改对父变量所做的任何更改。是否有一种简单的方法可以让父构造函数进入子构造函数或其他一些比上面提出的更有效的解决方案?

2 个答案:

答案 0 :(得分:0)

使字段公开,删除构造函数,定义任意数量的成员,声明您的类如:

public class Parent {
    public int one;
    public int two;
}

public class Child: Parent {
    public int three;
    public int four;
}

并将其实例化为

var child=
    new Child {
        one=1,
        two=2,
        three=3,
        four=4
    };

答案 1 :(得分:0)

如果你

  

处理数十个子类和大约30个父变量

您的架构存在严重问题。我可以建议您阅读有关继承http://en.wikipedia.org/wiki/Composition_over_inheritancePrefer composition over inheritance?的构图。

但是如果你对它无能为力,我建议你把这个父变量分组到一个对象中,并在构造函数中传递这个对象。