我有一个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 }
前两个工作,但第三个工作没有。 如果我从我的班级中删除构造函数,那么第三个可以工作,但不是第一个。
我该如何运作?
答案 0 :(得分:7)
这是因为当您没有定义任何构造函数时,编译器会插入一个没有参数的默认构造函数。你只需要添加一个空构造函数,
public Coordinates() { }
然后你可以使用所有三个版本
答案 1 :(得分:5)
如果添加构造函数,则省略默认构造函数。
只需将此代码添加到您的班级:
public Coordinates()
{
}
答案 2 :(得分:4)
第三个是以下代码的简短形式(语法糖):
Coordinates var = new Coordinates();
var.X = 0;
var.Y = 0;
var.Z = 0;
因此,您需要一个无参数的默认构造函数;这是在没有定义构造函数时由编译器生成的。
请注意,在这种情况下,调用者无需设置公共属性X
,Y
和Z
的值。
答案 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);