gpt4 book ai didi

c# - C# vnext 中的主构造函数

转载 作者:IT王子 更新时间:2023-10-29 04:48:49 27 4
gpt4 key购买 nike

Language feature implementation status通过 C# Chat 引起了我的注意.关于 this existing question 中未涵盖的一些功能,我有几个问题.

一些新特性是显而易见的,例如 Getter-only 自动属性

public int Y { get; } = y;

... 太棒了。

但是其他的我不清楚...


主要构造函数

class Point(int x, int y) { … }

这可能是我的知识空白,但我以前没有遇到过“主构造函数”这个词,但是some research似乎暗示基本上这是定义以下内容的快捷方式

class Point
{
private int x;
private int y;

public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
  • 这是正确的解释吗?
  • 这是否意味着您仍然可以进行构造函数重载(术语“主要”意味着如此)?
  • 你能在其他构造函数/方法中引用这些隐式支持字段吗?

最佳答案

  • Is this the correct interpretation?

几乎,但不完全是。默认情况下,主构造函数参数不会被捕获到字段中;然而,它们可以在实例成员初始化器中访问(并且只能在那里),因此您可以使用它们显式初始化字段或属性:

class Point(int x, int y)
{
public int X { get; } = x;
public int Y { get; } = y;
}

(请注意,在这种情况下,支持字段创建的,但用于属性,而不是构造函数参数)

但是您也可以使用访问修饰符声明参数,在这种情况下,它们将被捕获为字段,并且可以从所有实例成员访问:

class Point(public readonly int x, public readonly int y)
{
}

(如您所见,您还可以为字段指定其他修饰符,例如readonly)

  • Does this mean you can still do constructor overloads (the term "primary" implies so)?

是的,您可以有其他非主构造函数。但是,它们都需要使用通常的 : this(...) 语法调用主构造函数。

  • Can you refer to these implicit backing fields in other constructors/methods?

如上所述,没有隐式支持字段;仅当您在主构造函数参数上显式指定访问修饰符时,才会创建支持字段。


编辑:此功能已被撤销,不会出现在 C# 6 中(可能出现在 C# 7 中,形式略有不同)

关于c# - C# vnext 中的主构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22908005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com