可选的构造函数

Adr*_*veu 2 c# constructor

我有一个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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

前两个工作,但第三个没有.如果我从我的类中删除构造函数,第三个工作,但不是两个第一个.

我该如何工作?

小智 7

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

public Coordinates() { } 
Run Code Online (Sandbox Code Playgroud)

然后你可以使用所有三个版本


Fla*_*ric 5

如果添加构造函数,则省略默认构造函数.

只需将此代码添加到您的班级:

public Coordinates()
{
}
Run Code Online (Sandbox Code Playgroud)

  • 我想说在这种情况下默认构造函数是"抑制"或"省略"._overridden_​​这个词意味着别的东西. (3认同)