using
using关键字有两个主要用途:
- 作为指令,为命名空间创建别名或导入其他命名空间中的类型。
- 作为语句,定义一个范围,在此范围的末尾将释放对象。
using指令
using指令有两个用途:
- 导入其他命名空间中的类型:
- 为命名空间或类型创建别名:
using System.Text;
using Project = PC.MyCompany.Project;
using指令的特点:
- using指令的作用范围限制为包含它的文件,在其他文件中的using指令,对现有文件无效。
- using别名,用于方便讲标识符限定到命名空间或类型。using别名指令的右侧必须是一个完全限定类型。且与前面的using指令无关。
- using指令,便于在命名空间中使用而类型,而不必指定命名空间。
- using指令不提供对嵌套在指定命名空间中的任何命名空间的访问。
示例1
下面的示例演示如何为命名空间定义和使用using别名
namespace PC
{
// Define an alias for the nested namespace.
using Project = PC.MyCompany.Project;
class A
{
void M()
{
// Use the alias
Project.MyClass mc = new Project.MyClass();
}
}
namespace MyCompany
{
namespace Project
{
public class MyClass { }
}
}
}
using别名指令的右侧不能由开放的泛型类型。例如,不能是List<T>,但可以为List<int>创建别名。
示例2
下面演示如何为类定义using指令和using别名:
using System; // Using alias directive for a class.
using AliasToMyClass = NameSpace1.MyClass; // Using alias directive for a generic class.
using UsingAlias = NameSpace2.MyClass<int>; namespace NameSpace1
{
public class MyClass
{
public override string ToString()
{
return "You are in NameSpace1.MyClass.";
}
} } namespace NameSpace2
{
class MyClass<T>
{
public override string ToString()
{
return "You are in NameSpace2.MyClass.";
}
}
} namespace NameSpace3
{
// Using directive:
using NameSpace1;
// Using directive:
using NameSpace2; class MainClass
{
static void Main()
{
AliasToMyClass instance1 = new AliasToMyClass();
Console.WriteLine(instance1); UsingAlias instance2 = new UsingAlias();
Console.WriteLine(instance2); }
}
}
// Output:
// You are in NameSpace1.MyClass.
// You are in NameSpace2.MyClass.
using语句
便于正确使用IDisposable对象。
示例
下面演示如何使用using语句。
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
File和Font是访问非托管资源的托管类型的示例。还有许多其他类型的非托管资源和对应封装这些资源的类库。所有这些类型都必须实现IDisposable接口。
当使用IDisposable对象时,应该在using语句中声明和实例化此对象。using语句能自动调用对象的Dispose方法,在调用Dispose时对象离开其作用域。在using块中,对象时只读,不能修饰也不能重新赋值。
using语句确保Dispose方法的调用,即使发生了异常。也可以将对象放在try块中并在finally块中调用Dispose来达到同样的效果,实际上,编译器就是将using语句转换为这种形式。上面的代码在编译时会扩展为下面形式:
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
如下所示,可以在using语句中声明一个类型的多个实例。
using (Font font3 = new Font("Arial", 10.0f),
font4 = new Font("Arial", 10.0f))
{
// Use font3 and font4.
}
也可以实例化资源对象之后,将变量传递给using语句。不过这不是最佳做法。在这种情况下,该对象在控制权离开using语句之后还可见,但它可能不再具有对非托管资源的访问权,如果尝试在using块外部使用该对象,就可能引发异常。所以最好在using语句中实例化该对象并将其作用域限制在using块中。
Font font2 = new Font("Arial", 10.0f);
using (font2) // not recommended
{
// use font2
}
// font2 is still in scope
// but the method call throws an exception
float f = font2.GetHeight();
随机推荐
- 高性能Mysql
高性能 高可用 易伸缩 安全 高并发 定义 吞吐量(单位时间内多少次查询) MTBF(平均失效时间) MTTR(平均恢复时间) 同时工作的线程数或连接数 系统 事务 表锁.行级 ...
- Xceed Ultimate Suite Xceed界面控件套包下载
Xceed Ultimate Suites是一款用户界面.数据处理套包,从.NET/WPF/silverLight平台到ActiveX下包含了65个子控件,以及Xceed公司的所有控件,具有表格.风格 ...
- 微信公众平台开发接口PHP SDK完整版(转载)
<?php/* 方倍工作室 http://www.fangbei.org/ CopyRight 2015 All Rights Reserved*/ define("TOK ...
- Android中Service的使用
我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理 可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现. <一 ...
- yum命令详解
yum(全 称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载 ...
- CCLabel在最大宽度已知的情况下如何获取实际宽高
当前环境在cocos2.2.6, 在UI摆图中,会遇到一种情况就是 设定了label的最大宽度MAX_WIDTH,但label的内容是动态的,如何在label输入了文字之后获取label的真实宽高? ...
- Java配置环境变量
首先,你应该已经安装了Java 的 JDK 了,笔者安装的是:jdk-7u7-windows-x64 接下来主要讲怎么配置 Java 的环境变量 1.进入“计算机”的“属性”选项后如图 2.选择“高级 ...
- SQLite语句练习题
1. 查询Student表中的所有记录的Sname.Ssex和Class列. 2. 查询教师所有的单位即不重复的Depart列. 3. 查询Student表的所有记录. 4. 查询Score表中成绩在 ...
- java.lang.Enum<E extends Enum<E>>
public enum Direction { L, LU, U, RU, R, RD, D, LD, STOP, JUMP;} for(Direction d: Direction.values() ...
- asp.net ajax 调用一例
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...