一、@符号的妙用
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:Datawebss.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", 12), pen = new Pen(Brushes.Black)) { float size = (font as Font).Size; Brush brush = (pen as Pen).Brush; }
公众号:原文