zoukankan      html  css  js  c++  java
  • 使用关键字做元素名称

    问题描述

    近期工作中接触到了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#中使用关键字作为元素名时,需使用'@'前缀。

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

    转载请注明出处,欢迎交流。
  • 相关阅读:
    html头部属性全接触
    js中的window.onload和jquery中的load区别
    关机时,自动清除运行框的记录的设置方法
    MVC问题小总结,不断更新中...
    iis6 元数据库与iis6 配置的兼容 出错问题
    MVC对异步 Controller 的支持
    SQL Server2008安装报错,解决方案
    JavaScript有5个原始类型
    ASP.NET MVC中的拦截器
    F5负载均衡
  • 原文地址:https://www.cnblogs.com/louzixl/p/15392340.html
Copyright © 2011-2022 走看看