作者:
Clark Zheng 來源:
博客園 發布時間: 2008-09-10 19:44 閱讀: 3675 次 推薦: 0
原文鏈接 [收藏]
系列文章導航:
靜態成員和非靜態成員的區別?
const 和 static readonly 區別?
extern 是什么意思?
abstract 是什么意思?
internal 修飾符起什么作用?
sealed 修飾符是干什么的?
override 和 overload 的區別?
什么是索引指示器?
new 修飾符是起什么作用?
this 關鍵字的含義?
可以使用抽象函數重寫基類中的虛函數嗎?
C#基礎概念之密封類,屬性訪問器,接口
類和結構的區別?
C#基礎概念之抽象類,接口,接口多繼承
別名指示符是什么?
如何手工釋放資源?
C#基礎概念之P/Invoke,StringBuilder 和 String
explicit 和 implicit 的含義?
params 有什么用?
什么是反射?
19.別名指示符是什么?
答:
通過別名指示符我們可以為某個類型起一個別名
主要用于解決兩個命名空間內有同名類型的沖突或避免使用冗余的命名空間
別名指示符在所有命名空間最外層定義,作用域為整個單元文件。如果定義在某個命名空間內,那么它只在直接隸屬的命名空間內起作用
示例:

Code
Class1.cs:
using System;
using System.Collections.Generic;
using System.Text;
namespace com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib01
{
class Class1
{
public override string ToString()
{
return "com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib01's Class1";
}
}
}
Class2.cs:
using System;
using System.Collections.Generic;
using System.Text;
namespace com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib02
{
class Class1
{
public override string ToString()
{
return "com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib02's Class1";
}
}
}
主單元(Program.cs):
using System;
using System.Collections.Generic;
using System.Text;
//使用別名指示符解決同名類型的沖突
//在所有命名空間最外層定義,作用域為整個單元文件
using Lib01Class1 = com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib01.Class1;
using Lib02Class2 = com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib02.Class1;
namespace Example19
{
namespace Test1
{
//Test1Class1在Test1命名空間內定義,作用域僅在Test1之內
using Test1Class1 = com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib01.Class1;
class Class1
{
//Lib01Class1和Lib02Class2在這可以正常使用
Lib01Class1 tmpObj1 = new Lib01Class1();
Lib02Class2 tmpObj2 = new Lib02Class2();
//TestClass1在這可以正常使用
Test1Class1 tmpObj3 = new Test1Class1();
}
}
namespace Test2
{
using Test1Class2 = com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib01.Class1;
class Program
{
static void Main(string[] args)
{
//Lib01Class1和Lib02Class2在這可以正常使用
Lib01Class1 tmpObj1 = new Lib01Class1();
Lib02Class2 tmpObj2 = new Lib02Class2();
//注意這里,TestClass1在這不可以正常使用。
//因為,在Test2命名空間內不能使用Test1命名空間定義的別名
//Test1Class1 tmpObj3 = new Test1Class1();
//TestClass2在這可以正常使用
Test1Class2 tmpObj3 = new Test1Class2();
Console.WriteLine(tmpObj1);
Console.WriteLine(tmpObj2);
Console.WriteLine(tmpObj3);
Console.ReadLine();
}
}
}
}
結果:
com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib01's Class1
com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib02's Class1
com.nblogs.reonlyrun.CSharp25QExample.Example19.Lib01's Class1
文章列表