现在的位置: 首页 > 综合 > 正文

using 指令 和 using 语句 C#

2018年08月05日 ⁄ 综合 ⁄ 共 3112字 ⁄ 字号 评论关闭

 

using
指令(C#
参考)

Visual Studio 2010

·

using
指令有两个用途:

·        
允许在命名空间中使用类型,这样,您就不必在该命名空间中限定某个类型的使用:

using System.Text;

·        
为命名空间或类型创建别名。

这称为“using
别名指令

using Project = PC.MyCompany.Project;

using
关键字还用来创建 using
语句,此类语句有助于确保正确处理
IDisposable
对象(如文件和字体)。
有关更多信息,请参见
using
语句

备注


using
指令的范围限制为包含它的文件。

创建
using
别名,以便更易于将标识符限定到命名空间或类型。
using
别名指令的右侧必须始终是一个完全限定类型,而与前面的 using
指令无关。

创建
using
指令,以便在命名空间中使用类型而不必指定命名空间。
using
指令不为您提供对嵌套在指定命名空间中的任何命名空间的访问。

命名空间分为两类:用户定义的命名空间和系统定义的命名空间。
用户定义的命名空间是在代码中定义的命名空间。
有关系统定义的命名空间的列表,请参见
.NET Framework
类库

有关引用其他程序集中的方法的示例,请参见创建和使用
C# DLL

示例
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>
创建 using
别名,但可以为 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
语句(C#
参考)

Visual Studio 2010

提供能确保正确使用
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();

抱歉!评论已关闭.