可选的构造函数

时间:2014-05-04 16:41:38

标签: 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; }
}

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

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

前两个工作,但第三个工作没有。 如果我从我的班级中删除构造函数,那么第三个可以工作,但不是第一个。

我该如何运作?

7 个答案:

答案 0 :(得分:7)

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

public Coordinates() { } 

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

答案 1 :(得分:5)

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

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

public Coordinates()
{
}

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:1)

第三个是默认构造函数,如果没有定义其他构造函数,则默认构造函数仅公开可用。

要声明您还希望再次将默认构造函数设为public,您需要明确说明。

public Coordinates() { }

答案 4 :(得分:1)

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

public Coordinates(){}

答案 5 :(得分:0)

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

将此添加到您的坐标类:

public Coordinates()
{
}

并创建这样的对象:

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

答案 6 :(得分:-1)

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

public Coordinates()
{
}

另一种方法是使用具有三个浮点变量的那个:

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