默认参数必须是编译时常量,因此它们可以是内置类型或结构。更确切地说,它们不能是一个类实例。
public class Complex { }
public struct Point
{
public Complex complex;
public Point(int any)
{
complex = new Complex();
}
}
static class Program
{
static void Method1(Point p = new Point()) { }
//static void Method2(Complex c = new Complex()) { } //cannot be compiled
static void Main()
{
Method1();
// Method2(); cannot be compiled
}
}
我不明白为什么封装类的结构是编译时常量可以回想一下类实例不是编译时常量?
答案 0 :(得分:2)
它不是编译时常量。您的Point调用是允许的,optional arguemnts可以是:
在这种情况下,您使用第二个允许选项作为可选参数 - 表达式new ValType()
,因为struct
是值类型。
您的值类型封装类的事实并不重要 - 您获得值类型的默认值(将complex
设置为null
)。