使用默认参数而不是默认构造函数调用构造函数

Inf*_*hze 6 c# struct

我想调用一个结构的构造函数,它具有所有参数的默认值。但是当我调用 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)

Mar*_*ell 5

不,基本上。如果您使用new MyRectangle(),它将始终首选默认构造函数(意思是:在 的情况下为零初始化struct)。

如果您正在处理整数,一种可能的解决方法是在属性访问器中使用 xor 和您想要的默认值 - 这意味着当字段为零时,您从访问器中获得默认值。不幸的是,要做到这一点double需要使用不安全的代码来重新解释类型。

另一种可能的解决方案是添加一个您可以使用的虚拟参数,例如:

new MyRectangle(dummy: true)
Run Code Online (Sandbox Code Playgroud)

除了允许您选择自定义构造函数之外,dummy参数实际上什么都不做。

另一个最终选择是使用工厂方法 ( static MyRectangle Create(...)) 而不是构造函数。