一、@符号的妙用

1、可以作为保留关键字的标识符

C#规范当中,不允许使用保留关键字(class、bool等)当作普通的标识符来命名,这时候@符号作用就体现

出来了,可以通过@符号前缀把这些保留关键字可以当作普通的字符使用。

比如:

string @class="hello";  //是正确的

string class="hello";   //报错

2、@符号可以表示跨行字符串

比如:

string str=@"hello

             world

 !"; //这样写是正确的

3、字符串转义字符

很多时候程序中出现目录的时候会有“\”,字符表示转义字符,要表示普通字符的时候需要写成“\\”,当这样字符过多的时候写起来不是很简洁,这时候可以使用@字符。

比如:

string path="d:\\Data\\web\\ss.txt";//一般写法

string path=@"d:\Data\web\ss.txt";//使用@符号

二、using的用法

1、using 指令

用来引入命名空间,比如:using System;

2、为命名空间或类型创建别名

using引入命名空间,并不等于编译器编译时加载该命名空间所在的程序集,程序集的加载决定于程序中对该程序集是否存在调用操作,

如果代码中不存在任何调用操作则编译器将不会加载using引入命名空间所在程序集。

创建别名的另一个重要的原因在于同一文件中引入的不同命名空间中包括了相同名称的类型,

例如SharpMap.Geometries.Point与System.Drawing.Point。为了避免出现名称冲突,可以通过设定别名来解决:

 using SGPoint = SharpMap.Geometries.Point;

 using SDPoint = System.Drawing.Point;

尽管我们可以通过类型全名称来加以区分,但是这显然不是最佳的解决方案。用using指令创建别名,

有效的解决了这种可能的命名冲突,才是最佳的解决方案。

3、using语句

using 语句允许程序员指定使用资源的对象应当何时释放资源。using 语句中使用的对象必须实现 IDisposable 接口。

IDisposable接口提供了 Dispose 方法,该方法将释放此对象的资源。

例如:

 using(TextReader reader=new StreamReader(filename))

{

  string line;

  whil((line=read.ReadLine())!=null)

  {

     Console.WriteLine(line);

  }

}

等价于以下形式:

{

 TextReader reader=new StreamReader(filename);

 try

 {

  string line;

  while((line=read.ReadLine())!=null)

   {

     Console.WriteLine(line);

   }

 }

 finally

  {

    if(reader!=null)

    {

       (IDisposible)reader.Dispose();

    }

   }

}

4、使用规则

1、using只能用于实现了IDisposable接口的类型,禁止为不支持IDisposable接口的类型使用using语句,否则会出现编译错误;

2、using语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以try-finnaly来实现,

因为嵌套的using语句可能存在隐藏的Bug。内层using块引发异常时,将不能释放外层using块的对象资源;

3、using语句支持初始化多个变量,但前提是这些变量的类型必须相同,例如:

using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))

{

      //todo

}

4、针对初始化对个不同类型的变量时,可以都声明为IDisposable类型,例如:

 using (IDisposable font = new Font("Verdana", ), pen = new Pen(Brushes.Black))

{

   float size = (font as Font).Size;

   Brush brush = (pen as Pen).Brush;

}

公众号:原文

.Net开发的两个小技巧的更多相关文章

  1. Linux命令学习之两个小技巧(1)

    本篇主要想讲两个小技巧.本来技巧之类的话应该放在学完整个东西之后或者在学习中遇到时再说的,但是这两个技巧其实很简单,很多人只要我一提就知道了.与其说是技巧,不如说是注意事项. 自动补全 在Linux终 ...

  2. Objective-C中3种枚举比较及KVC两个小技巧

    Objective-C中3种枚举比较及KVO两个小技巧 一:oc的3种枚举 for循环 for in 枚举块 如代码 NSUInteger totalCount = 10000; NSMutableA ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(十四)——开发环境容器调试小技巧

    之前有很多同学提到如何做容器调试,特别是k8s环境下的容器调试,今天就讲讲我是如何调试的.大家都知道在vs自带的创建项目模板里勾选docker即可通过F5启动docker容器调试.但是对于启动在k8s ...

  4. RS开发中的一些小技巧[不定期更新]

    从9月份一直忙到了现在,项目整体的改版工作也完成了十有八九了,有些事情只有你自己真正的做了,你才能明白:哦,原来还可以这个样子,这样做真的好了很多呢,接下来我就分享一些最近遇到的RS开发的一些小技巧, ...

  5. xcode开发的6个小技巧

    Xcode是iPhone和iPad开发者用来编码或者开发iOS app的IDE.Xcode有很多小巧但很有用的功能,很多时候我们可能没有注意到它们,也或者我们没有在合适的水平使用这些功能简化我们的iO ...

  6. 开发必备的Windows小技巧

    在Windows中我们经常会遇到各种小问题,而这些小问题又确实在影响着工作效率,如果能解决这些小问题,那么就能在一定程度上提高工作效率,保证心情愉悦.今天我就来分享一下几个自认为比较有用的小技巧. 保 ...

  7. 这两个小技巧,让我的SQL语句不仅躲了坑,还提升了1000 倍

    原文: https://cloud.tencent.com/developer/article/1465618 本次来讲解与 SQL 查询有关的两个小知识点,掌握这些知识点,能够让你避免踩坑以及提高查 ...

  8. vue开发必须知道的小技巧

    近年来,vue越来越火,使用它的人也越来越多.vue基本用法很容易上手,但是还有很多优化的写法你就不一定知道了.本文列举了一些vue常用的开发技巧.require.context() 在实际开发中,绝 ...

  9. Java开发中的一些小技巧

    原文:http://www.cnblogs.com/xdp-gacl/p/3490276.html 一. Java获取URL地址中传递的参数 /** * 获取URL中的参数名和参数值的Map集合 * ...

随机推荐

  1. wpf之StackPanel、WrapPanel、WrapPanel之间的关系

    一.StackPanel StackPanel是以堆叠的方式显示其中的控件 1.可以使用Orientation属性更改堆叠的顺序分为水平方向(Orientation="Horizontal& ...

  2. 浩哥解析MyBatis源码(十二)——binding绑定模块之MapperRegisty

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6758456.html 1.回顾 之前解析了解析模块parsing,其实所谓的解析模块就是为 ...

  3. Session攻击(会话劫持+固定)与防御

    1.简介 Session对于Web应用无疑是最重要的,也是最复杂的.对于web应用程序来说,加强安全性的第一条原则就是 – 不要信任来自客户端的数据,一定要进行数据验证以及过滤,才能在程序中使用,进而 ...

  4. PHP获取随机数

    <?php $FileID=date("Ymd-His") . '-' . rand(100,999); //$FileID为   20100903-132121-908   ...

  5. oracle 创建用户并赋权 清空用户表

    create user BUSM identified by BUSM; grant connect,resource,dba to BUSM; grant select any table to B ...

  6. ESXi5.0误删除虚拟机还有办法恢复吗?答案是可以!

    [数据恢复故障描述]故障的虚拟化系统是 ESXi5.0,连接了多个LUN,其中一个1T的LUN上跑有7 台虚拟机,均为Windows Server 2003,管理员因为其它原因误删除了一台虚拟机,此台 ...

  7. http工具类

    /** * 发送post请求工具方法 * * @Methods Name HttpPost * @Create In 2014年10月28日 By wangfei * @param url * @pa ...

  8. Linux下memcache的安装和启动测试

    memcache是一套分布式的高速缓存系统,MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作:如果请求的数据不在me ...

  9. hdu4639 hehe 递推

    此题为递推题 现场比赛中由于心态问题没能快速推出来定义f[i]为i个连续的he可以表示的语意的个数 则如果第i个he单独考虑f[i]=f[i-1];如果将第i个he和第i-1个he组合 则其只能表示为 ...

  10. keydown - > keypress - > keyup 用法和区别

    英文输入法:   事件触发顺序:keydown - > keypress - > keyup   中文输入法:   firfox:输入触发keydown,回车确认输入触发keyup chr ...