为什么DateTime const的声明给出了编译器错误而不是可选参数?
本文关键字:参数 错误 编译器 const DateTime 声明 为什么 | 更新日期: 2023-09-27 18:15:19
我觉得我不擅长看标题。但是请听我说:我知道为什么引用类型本身不能声明为const——它们必须在编译时完全可求值。因此,引用类型的常量唯一可能的值是string和null引用。
所以const DateTime x = some date
不成立是有道理的。但是按照这个逻辑,我不应该能够传递例如DateTime d1 = default(DateTime)
作为可选参数,就像我不能声明const DateTime d1 = default(DateTime)
一样,因为可选参数必须是编译时常数?这一直是我的态度"没意思"但我现在开始好奇了。
不是编译时常数吗?一个常数就是一个常数?
当然,它也可能是我的IDE (Visual Studio)只是给出了一个错误,因为DateTime不允许作为const
,它会编译为default(DateTime)
或null
参考?
查看msdn关于可选参数的文章。当数据类型是值类型(enum、struct)时,可以使用空构造函数初始化可选形参:
static void Foo(string s, DateTime opt = new DateTime())
或者使用默认关键字。对于引用类型,这是不成立的。