C# 为什么封装类的结构可以是编译时常量?
默认参数必须是编译时常量,以便它们可以是内置类型或结构。更准确地说,它们不能是类实例C# 为什么封装类的结构可以是编译时常量?,c#,C#,默认参数必须是编译时常量,以便它们可以是内置类型或结构。更准确地说,它们不能是类实例 public class Complex { } public struct Point { public Complex complex; public Point(int any) { complex = new Complex(); } } static class Program { static void Method1(Point p =
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
}
}
我不明白的是,为什么封装类的结构可以是编译时常量?回想一下,类实例不是编译时常量?它不是编译时常量。您的点名通话可以是:
- 恒定的表达式李>
- 形式为new ValType()的表达式,其中ValType是值类型,如枚举或结构李>
- 默认形式的表达式(ValType),其中ValType是值类型
new ValType()
的表达式,因为struct
是一种值类型
您的值类型封装类这一事实并不重要-您将获得值类型的默认值(将
complex
设置为null
)。当然我理解这些列表,我不明白的是,为什么结构中的类字段可以使结构成为编译时常量。@FifaEarthCup2014,因为您使用的是结构的默认无参数构造函数,并将所有字段设置为默认值。您不能更改无参数构造函数的实现,因此只能在编译时进行constant@FifaEarthCup2014它不是编译时常量。还有其他允许的选项。@FifaEarthCup2014结构的默认值是允许的可选参数。