为什么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参考?

为什么DateTime const的声明给出了编译器错误而不是可选参数?

查看msdn关于可选参数的文章。当数据类型是值类型(enum、struct)时,可以使用空构造函数初始化可选形参:

static void Foo(string s, DateTime opt = new DateTime())

或者使用默认关键字。对于引用类型,这是不成立的。