我想调用一个结构的构造函数,它具有所有参数的默认值。但是当我调用 MyRectangle 的无参数构造函数时,会调用一个未定义的构造函数。这是为什么?是否可以不调用 not 从我创建的构造函数?
using System;
namespace UebungClasses
{
class Program
{
static void Main(string[] args)
{
MyRectangle sixRec = new MyRectangle(3, 2);
MyRectangle oneRec = new MyRectangle();
Console.WriteLine("area of six: " + sixRec.Area() + " area of one: " + oneRec.Area());
}
}
public struct MyRectangle
{
public MyRectangle(double w = 1, double l = 1)
{
width = w;
length = l;
Console.WriteLine("Width: " + width + " Lenght: " + length);
}
public double Area()
{
return width * length;
}
private double width;
private double length;
}
}
Run Code Online (Sandbox Code Playgroud)
不,基本上。如果您使用new MyRectangle(),它将始终首选默认构造函数(意思是:在 的情况下为零初始化struct)。
如果您正在处理整数,一种可能的解决方法是在属性访问器中使用 xor 和您想要的默认值 - 这意味着当字段为零时,您从访问器中获得默认值。不幸的是,要做到这一点double需要使用不安全的代码来重新解释类型。
另一种可能的解决方案是添加一个您可以使用的虚拟参数,例如:
new MyRectangle(dummy: true)
Run Code Online (Sandbox Code Playgroud)
除了允许您选择自定义构造函数之外,此dummy参数实际上什么都不做。
另一个最终选择是使用工厂方法 ( static MyRectangle Create(...)) 而不是构造函数。