使用关键字做元素名称

  • A+
所属分类:.NET技术
摘要

近期工作中接触到了VB语言,在学习VB的过程中,看到如下一段代码,很是疑惑。


问题描述

近期工作中接触到了VB语言,在学习VB的过程中,看到如下一段代码,很是疑惑。

For Each s In [Enum].GetNames(GetType(Colors))     Console.WriteLine(s) Next 

Enum是枚举类,同C#,但是在使用其静态方法的时候为什么还要加一对方括号?

问题解决

进行了简单的搜索后,没找到答案。请教了下同事,同事说应该是因为关键字做为类名。

通过再次搜索及测试验证,确实是因为使用了关键字做类型名,见微软官方文档

之前进行C#开发时,并未注意到这一点。或许是因为从来不会将关键字作为类型名或变量名。

接下来就进行了一些简单的测试,如下:

Module Program     Sub Main(args As String())         '使用关键字作为变量名         'Dim shared As New [Enum] 报错,提示“Shared”在局部变量声明中无效         Dim [shared] As New [Enum]         [shared].AcceptDetails()         [shared].Display()         '访问静态成员         Console.WriteLine("Side: {0}", [Enum].Side)          Console.ReadLine()     End Sub End Module  '使用关键字做类名 'Public Class Enum 报错,提示关键字作为标识符无效 Public Class [Enum]     Private length As Double     Private width As Double      Public Shared Side As Double = 5      Public Sub AcceptDetails()         length = 4.5         width = 3.5     End Sub      Public Function GetArea() As Double         GetArea = length * width     End Function      Public Sub Display()         Console.WriteLine("Area: {0}", GetArea())     End Sub End Class 

为了进行对比,搜索了C#使用关键字作为元素名的方式,见微软官方文档

C#使用关键字做元素名时,通过加'@'解决。同样进行了简单的测试,如下:

class Program {     static void Main(string[] args)     {         // 使用关键字作为变量名         // var static = new @enum(); 报错,提示修饰符“static”对该项无效         var @static = new @enum();         @static.AcceptDetails();         @static.Display();         //访问静态成员         Console.WriteLine("Side: {0}", @enum.Side);          Console.ReadLine();     } }  // 使用关键字做类名 // class enum 报错,提示应输入标识符 class @enum {     public void AcceptDetails()     {         _length = 4.5;         _width = 3.5;     }      public double GetArea() => _length * _width;      public void Display() => Console.WriteLine($"Area: {GetArea()}");      private double _length;     private double _width;      public static double Side = 5; } 

总结

首先,VB是不区分大小写的,因此很容易暴露该问题。比如Enum类,Enum同样是关键字,无法直接使用。C#区分大小写,enum为关键字,而Enum为类型,可以直接使用Enum。

其次,VB中使用关键字作为元素名时,需添加方括号。如果是调用类型的静态方法,也可以完全限定,如System.Enum.GetNames()。C#中使用关键字作为元素名时,需使用'@'前缀。

最后,尽量还是不要使用关键字作为元素名称。