在.NET中using是一个多用途的关键字,除了可以引用命名空间之外,还可以用来进行异常处理。今天我们再来说说用using关键字实现的另一个功能,既定义别名,通俗的讲就是起外号!:)

    using可以为命名空间或是类型定义别名,如果定义在命名空间之外,别名生效的范围就仅限于当前文件;如果定义在命名空间之内,则生效范围为当前代码块与定义别名的命名空间之交集。下面我们就来看看如何用using关键字来为命名空间定义别名:

.NET别名机制简介using C = System.Console;
.NET别名机制简介
.NET别名机制简介
class Program

可以给命名空间起别名,这在一定程度上方便了我们开发,但是我们有时候会遇到一个新的问题。请看下面的例子:

 

//Assebly1中有如下代码:

.NET别名机制简介namespace Foo.IO
}
//在Assembly2中有如下代码:
.NET别名机制简介namespace Foo.IO
}
.NET别名机制简介

 

//然后我们有一个类同时引用了上面的两个程序集

.NET别名机制简介using FooIO = Foo.IO;
.NET别名机制简介
using CusIO = Custom.IO;
.NET别名机制简介
.NET别名机制简介
class Program
}

 

注意上面的代码是不能通过编译的,因为编译器不知道FooIO.Stream是指assembly1下的Foo.IO.Stream(该类是通过别名引用的)还是指assembly2下的FooIO.Stream(该类是直接引用的)。这时,我们就要请出“命名空间别名限定符::”来帮忙了,这们用“::”来将上面的代码重写如下,就可以编译通过了。

.NET别名机制简介using FooIO = Foo.IO;
.NET别名机制简介
using CusIO = Custom.IO;
.NET别名机制简介
.NET别名机制简介
class Program
}

 

注意,这时stream1是Assembly1中Foo.IO.Stream的一个实例。

另外还有两个比较特殊的别名符,就是全局限定符和外部限定符。分别示例如下:

全局限定符:

.NET别名机制简介using System;
.NET别名机制简介
class Program
}
全局限定符是为了解决在一些大型项目中,有时命名空间的命名会和某个语法元素的名字冲突。如上例中的Console变量与System.Console。
外部别名:
.NET别名机制简介// Assembly1 有如下代码:
.NET别名机制简介
namespace FooIO
}
请注意,以上代码如果想编辑成功,必须在类库引用属性窗口给Assembly1起一个AliasAsm1的别名,给Assembly2起AliasAsm2的别名;或是直接运行csc.exe /r:AliasAsm1= Assembly1.dll /r:AliasAsm2=Assembly2.dll Program.cs。外部别名允许我们使用定义在两个不同的程序集,但是全名一样的类(这种情况一般发生在我们需要使用一个程序集的不同版本时)。

相关文章:

  • 2022-12-23
  • 2022-01-03
  • 2021-06-26
  • 2022-12-23
  • 2021-08-28
  • 2022-12-23
  • 2021-07-14
猜你喜欢
  • 2022-12-23
  • 2021-12-18
  • 2022-12-23
  • 2022-12-23
  • 2021-11-19
  • 2021-08-19
  • 2021-08-27
相关资源
相似解决方案