使用构造函数链接实现此构造的正确方法?

时间:2009-12-03 01:27:19

标签: c# constructor complex-numbers constructor-chaining

我有第一个OOP课程的作业,我理解所有这些,包括以下声明:

  

您应该创建一个名为ComplexNumber的类。此类将包含定义为双精度的私有数据成员中复数的实部和虚部。您的类应包含一个构造函数,该构造函数允许将虚数的数据成员指定为构造函数的参数。默认(非参数化)构造函数应将数据成员初始化为0.0。

当然我知道如何创建这些构造函数而不将它们链接在一起,并且赋值不需要链接它们,但我想按照我的意愿。

没有将它们链接在一起,我的构造函数看起来像这样:

class ComplexNumber
{
    private double realPart;
    private double complexPart;

    public ComplexNumber()
    {
         realPart = 0.0;
         complexPart = 0.0
    }

    public ComplexNumber(double r, double c)
    {
         realPart = r;
         complexPart = c;
    }
    // the rest of my class code...
}

3 个答案:

答案 0 :(得分:10)

这是你要找的吗?

public ComplexNumber()
    : this(0.0, 0.0)
{
}

public ComplexNumber(double r, double c)
{
     realPart = r;
     complexPart = c;
}

答案 1 :(得分:3)

@Rex有链接的连接答案。

但是在这种情况下,不需要链接或任何初始化。 CLR将在对象构造函数期间将字段初始化为其默认值。对于双精度,这将使它们初始化为0.0。因此,默认构造函数中的赋值不是绝对必要的。

有些人喜欢显式初始化他们的字段以获取文档或可读性。

答案 2 :(得分:1)

  

我仍在尝试掌握构造函数链的概念,所以它有效,但为什么/如何?

构造函数链接的'how'在构造函数定义中使用'this'关键字,并在Rex M的示例中显示。

构造函数链接的“原因”是重用构造函数的实现。如果第二个构造函数的实现(主体)冗长而复杂,那么你需要重用它(即链接到它或调用它),而不是将它复制并粘贴到其他构造函数中。另一种方法是将在几个构造函数之间共享的代码放入一个从几个构造函数调用的公共子例程中:但是,不允许此子例程初始化readonly字段(只能初始化)从构造函数而不是从子例程),所以构造函数链是解决方法。