使用关键字做元素名称
问题描述
近期工作中接触到了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 DoublePublic Shared Side As Double = 5Public Sub AcceptDetails()
length = 4.5
width = 3.5
End SubPublic Function GetArea() As Double
GetArea = length * width
End FunctionPublic 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#中使用关键字作为元素名时,需使用'@'前缀。最后,尽量还是不要使用关键字作为元素名称。
推荐阅读
- 我要做大厨
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 我从来不做坏事
- 由浅入深理解AOP
- 子龙老师语录
- 做一件事情的基本原理是什么()
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询