有以下简单的代码:
Class A Private value As Integer = 1 Sub Action(Optional param1 As Integer = value) End Sub End Class
Visual Studio抱怨错误BC30369的默认值(值):
Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
对于这种情况,这真的是错误的吗?该方法不共享.
在Visual Studio 2012或2013中,同一情况下的错误是
Constant expression is required.
什么绝对有道理.
解决方法
经过进一步研究后,我认为编译器进行检查的顺序存在问题.
如果我更改代码,使值成员共享,我得到正确的结果:错误BC30059
Constant expression is required.
由于除了常量之外的任何内容都不能置于Optional子句的默认值中,因此检查上面的BC30059(“需要常量表达式”)应该明显比BC30369的检查“更早”(如图所示).