VB.NET中为何√不能作函数名而π可以?Unicode命名规则问询
VB.NET中√函数名编译失败但π可行的原因及命名规则
问题场景
以下VB.NET代码因使用√字符作为函数名,触发编译错误BC30037: invalid character:
Public Function √(x As BigDecimal) As BigDecimal Return BigDecimal.SquareRoot(x, BigDecimal.Precision) End Function
但使用π作为函数名的代码却能正常编译:
Public Function π(x As BigDecimal) As BigDecimal Return BigDecimal.SquareRoot(x, BigDecimal.Precision) End Function
即使给√添加下划线前缀(比如_√),依然无法通过编译,这是为什么?VB.NET对函数名的Unicode字符有什么规则?
原因解析
字符分类差异
π(Unicode编码U+03C0)属于数学字母数字符号类别,这类字符被VB.NET认定为符合标识符命名规范的“字母类”字符,允许作为函数名的首字符。√(Unicode编码U+221A)属于数学运算符类别,这类字符被VB.NET编译器判定为无效标识符字符——下划线只能修饰合法字符组成的标识符,无法将非法字符转为合法,所以加前缀也没用。
VB.NET标识符的Unicode命名规则
VB.NET的函数名、变量名等标识符需遵循以下规则:
- 首字符必须是:普通字母、下划线(
_),或Unicode中归类为“字母”“字母数字连接符”的字符(比如π这类数学字母)。 - 后续字符可以是:字母、数字、下划线,或Unicode中归类为“字母”“数字”“字母数字连接符”“标点连接符”的字符。
- 绝对禁止使用Unicode中属于“运算符”“符号”“控制字符”类别的字符,比如
√这类数学运算符就属于被禁止的范围。 - 不能与VB.NET的内置关键字(如
Public、Return)重名。
内容的提问来源于stack exchange,提问作者schlebe
相关产品推荐
相关产品推荐

