一尘不染

如何在C#中进行构造函数链接

c#

我知道这应该是一个非常简单的问题,但是一段时间以来我一直在为这个概念而苦苦挣扎。

我的问题是,如何在C#中链接构造函数?

我在第一门OOP课上,所以我正在学习。我不了解构造函数链接的工作方式或实现方式,甚至不为什么比不进行链接的构造函数更好。

我希望得到一些带有解释的示例。

那么如何链接它们呢?
我知道有两个:

public SomeClass this: {0}

public SomeClass
{
    someVariable = 0
}

但是,您如何用三个,四个等等来做呢?

同样,我知道这是一个初学者的问题,但是我很难理解这一点,我也不知道为什么。


阅读 333

收藏
2020-05-19

共1个答案

一尘不染

您可以使用标准语法(使用this类似方法的方法)在类 内部 选择重载:

class Foo 
{
    private int id;
    private string name;

    public Foo() : this(0, "") 
    {
    }

    public Foo(int id, string name) 
    {
        this.id = id;
        this.name = name;
    }

    public Foo(int id) : this(id, "") 
    {
    }

    public Foo(string name) : this(0, name) 
    {
    }
}

然后:

Foo a = new Foo(), b = new Foo(456,"def"), c = new Foo(123), d = new Foo("abc");

另请注意:

  • 您可以使用以下方式链接到基本类型的构造函数 base(...)
  • 您可以在每个构造函数中添加额外的代码
  • 默认值(如果您未指定任何内容)是 base()

对于“为什么?”:

  • 代码减少(总是一件好事)
  • __调用非默认基本构造函数 所必需 ,例如:
    SomeBaseType(int id) : base(id) {...}
    

请注意,您也可以以类似的方式使用对象初始化程序(无需编写任何内容):

SomeType x = new SomeType(), y = new SomeType { Key = "abc" },
         z = new SomeType { DoB = DateTime.Today };
2020-05-19