可选的构造函数

本文关键字:构造函数 | 更新日期: 2023-09-27 18:01:31

我有一个Coordinates类,定义如下:

public class Coordinates
{
    [XmlIgnore]
    public Vector3 Vector3 { get { return new Vector3(X, Y, Z); } set { X = value.X; Y = value.Y; Z = value.Z; } }
    [XmlIgnore]
    public Coordinates(float cX, float cY, float cZ) { X = cX; Y = cY; Z = cZ; }
    [XmlIgnore]
    public Coordinates(Vector3 coord) { X = coord.X; Y = coord.Y; Z = coord.Z; }
    public float X { get; set; }
    public float Y { get; set; }
    public float Z { get; set; }
}

我需要能够使用以下三种方式定义这个类的新实例:

Coordinates var = new Coordinates(1,2,3);
Coordinates var = new Coordinates(Vector3.Zero);
Coordinates var = new Coordinates { X = 0, Y = 0, Z = 0 }

前两个可行,但第三个不行。如果我从我的类中删除构造函数,第三个可以工作,但前两个不能。

我如何让它工作?

可选的构造函数

这是因为当您没有定义任何构造函数时,编译器会插入一个没有参数的默认构造函数。您只需要添加一个空构造函数

public Coordinates() { } 

然后你可以使用三个版本

如果添加了一个构造函数,默认构造函数将被省略。

只需将以下代码添加到您的类中:

public Coordinates()
{
}

第三个只是以下代码的较短形式(语法糖):

Coordinates var = new Coordinates();
var.X = 0;
var.Y = 0;
var.Z = 0;

因此你需要一个无参数的默认构造函数;在没有定义构造函数时由编译器生成。请注意,在这种情况下,调用方不需要设置公共属性XYZ的值。

第三个是默认构造函数,默认构造函数只有在没有定义其他构造函数时才公开可用。

要声明您还希望将默认构造函数再次设置为公共,您需要显式地声明。

public Coordinates() { }

您缺少一个默认构造函数,当您根本没有任何构造函数时,它会自动生成。添加一行:

public Coordinates(){}

您需要使用一个空白构造函数并调用它,不调用它就不能创建一个新对象。当没有定义其他构造函数时,会自动创建一个默认的无参数构造函数,但是在创建自己的其他构造函数之后,必须提供一个默认的构造函数才能使用该语法。

添加到你的Coordinates类:

public Coordinates()
{
}

然后像这样创建对象:

Coordinates var = new Coordinates() { X = 0, Y = 0, Z = 0 };

这是因为您没有在类中定义默认构造函数。您所需要做的就是像这样添加一个:

public Coordinates()
{
}

另一种方法是像这样使用带有三个float变量的

Coordinates coords = new Coordinates(cX: 0, cY: 0, cZ: 0);