使用@符号让C#中的保留字做变量名的方法详解

在c和c++中,我们知道没办法起一个变量名叫int,因为这是C/C++保留的关键字,起这么一个变量名没办法区分到底是int类型还是int变量。
事实上在C#中也有这么一条规矩,就是不能起一个变量名是保留的关键字。如下图:

在C/C++中,我们是无能为力的,你必须起一个不叫int的,比如加个下划线。。
当然,C#中也可以这么干。

@
今天阅读《C# 3.0 in a Nutshell, 3rd Edition》才知道,原来还有一种办法就是加@符号(看了@符号的作用又多了一个):


代码如下:

class @int
    {
        static void Main(string[] args)
        {
            Console.WriteLine(@string.@long);
        }
    }
    class @string
    {
        public static int @long = 3;
    }

当然,@符号除了能加在保留字前面,也能加在其它任何合法的变量名前:


代码如下:

string @demoStr = string.Empty;

注意:在编译器中,@符号会自动移走的,也就是说demoStr和@demoStr在编译器中会被认为是同一个变量。

虽然c# 提供了这种机制来起一个保留字的变量名,但我个人认为这是一种不好的代码风格。因为对于不知道这个特性的其它人而言,这种方法可能会让他感到困惑。

(0)

相关推荐

  • C#中@的用法总结

    本文实例汇总了C#中@的用法,对C#程序设计来说有不错的借鉴价值.具体如下: 一 字符串中的用法 1.学过C#的人都知道C# 中字符串常量可以以@ 开头声名,这样的优点是转义序列"不"被处理,按"原样"输出,即我们不需要对转义字符加上 \ (反斜扛),就可以轻松coding.如, string filePath = @"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.t

  • 解析C#中@符号的几种使用方法详解

    1.限定字符串用 @ 符号加在字符串前面表示其中的转义字符"不"被处理. 如果我们写一个文件的路径,例如"D:/文本文件"路径下的text.txt文件,不加@符号的话写法如下: stringfileName="D://文本文件//text.txt"; 如果使用@符号就会比较简单: stringfileName=@"D:/文本文件/text.txt"; 2.让字符串跨行有时候一个字符串写在一行中会很长(比如SQL语句),不使用@

  • C#中使用@声明变量示例(逐字标识符)

    在C#中,@符号不仅可以加在字符串常量之前,使字符串不作转义之用,还可以加在变量名之前,使变量名与关键字不冲突,这种用法称为"逐字标识符".请看下面的代码: class @class { public static void @static(bool @bool) { if (@bool) System.Console.WriteLine("true"); else System.Console.WriteLine("false"); } } 这

  • c#中@的3种作用

    以前只知道@在C#中为了写文件路径的\不要加转义符而在前面加上@标识符,没想到@还有其他的作用 1.忽略转义字符 例如 string fileName = "D:\\文本文件\\text.txt"; 使用@后 string fileName = @"D:\文本文件\text.txt"; 2.让字符串跨行 例如 string strSQL = "SELECT * FROM HumanResources.Employee AS e" + "

  • 使用@符号让C#中的保留字做变量名的方法详解

    在c和c++中,我们知道没办法起一个变量名叫int,因为这是C/C++保留的关键字,起这么一个变量名没办法区分到底是int类型还是int变量.事实上在C#中也有这么一条规矩,就是不能起一个变量名是保留的关键字.如下图: 在C/C++中,我们是无能为力的,你必须起一个不叫int的,比如加个下划线..当然,C#中也可以这么干. @ 今天阅读<C# 3.0 in a Nutshell, 3rd Edition>才知道,原来还有一种办法就是加@符号(看了@符号的作用又多了一个): 复制代码 代码如下:

  • Shell脚本中多命令逻辑执行顺序的方法详解

    Linux中可以使用分号";".双and号"&&"和双竖线"||"来连接多个命令.单"&"符号也算命令连接符号,只不过它是将其前面的命令放入后台执行,所以可以变相地实现命令并行执行. 1.分号";" command1 ; command2 命令之间没有逻辑关系.分号连接的命令会按照顺序从前向后依次执行,但分号两端的命令之间没有任何逻辑关系,所有写出来的命令最终都会被执行,即使分号前面

  • 在Android中使用WebSocket实现消息通信的方法详解

    前言 消息推送功能可以说移动APP不可缺少的功能之一,一般简单的推送我们可以使用第三方推送的SDK,比如极光推送.信鸽推送等,但是对于消息聊天这种及时性有要求的或者三方推送不满足业务需求的,我们就需要使用WebSocket实现消息推送功能. 基本流程 WebSocket是什么,这里就不做介绍了,我们这里使用的开源框架是https://github.com/TakahikoKawasaki/nv-websocket-client 基于开源协议我们封装实现WebSocket的连接.注册.心跳.消息分

  • JavaScript中数组去重常用的五种方法详解

    目录 1.对象属性(indexof) 2.new Set(数组) 3.new Map() 4.filter() + indexof 5.reduce() + includes 补充 原数组 const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a', {}, {}]; 1.对象属性(indexof) 利用对象属性key排除重复项 遍历数组,每次判断新数组中是否存在该属性,不存在就存储在新数组中 并把数组元素作为key,最后返

  • Android中gson、jsonobject解析JSON的方法详解

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, ke

  • 改变vue请求过来的数据中的某一项值的方法(详解)

    由于 JavaScript 的限制, Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如:vm.items.length = newLength 在 <template> <div> <ul> <li v-for = " (item,index) in list" v-text='`${item} - ${index} `'>&

  • 在python中按照特定顺序访问字典的方法详解

    最近使用python写一些东西,在参考资料的时候发现字典是没有顺序的,那么怎么样按照一定顺序访问字典呐,我找到了一个小方法: 假设一个字典是: D = {'a': '1', 'b': '2', 'c': '3'} 如果我们要按照a, b, c的顺序访问字典,可以借助一个列表,比如说: L = list(D.keys()) L.sort() for key in L: print(key, 'is' D[key]) 输出为: a is 1 b is 2 c is 3 需要倒序的话只需使用倒序函数排

  • 对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding:utf-8 global_variable_1 = 'global_variable' class MyClass(): class_var_1 = 'class_val_1' # define class variable here def __init__(self, param): self

  • 在IntelliJ IDEA中使用Java连接MySQL数据库的方法详解

    一.下载MySQL数据库并进行安装和配置 下载地址:https://dev.mysql.com/downloads/installer/ 二.下载JDBC连接器 下载地址:mysql-connector-java-8.0.22 下载好压缩包并解压后找到mysql-connector-java-8.0.22.jar文件放在自己指定的路径下. 三.在项目中导入jar包 用于测试数据库连接的测试类Test.java代码: import java.sql.Connection; import java.

  • Node.js 中的 fs 模块与Path模块方法详解

    概述: 文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集.可以通过调用 require("fs") 来获取该模块.文件系统模块中的所有方法均有异步和同步版本. 文件系统模块中的异步方法需要一个完成时的回调函数作为最后一个传入形参. 回调函数的构成由调用的异步方法所决定,通常情况下回调函数的第一个形参为返回的错误信息. 如果异步操作执行正确并返回,该错误形参则为null或者undefined.如果使用的是同步版本的操作方法,一旦出现错误,会以通常的抛出错误的形式返回

随机推荐