所以我正在阅读MSDN文档并遇到过:
http://msdn.microsoft.com/en-us/library/sf0df423.aspx
使用using
指令的别名有什么实际用途?
我得到了什么,我不知道为什么我想要使用它。
答案 0 :(得分:9)
如果在两个不同的命名空间中有一个同名的类,那么它很有用。当发生这种情况时,你有两个选择。 using
一个名称空间而不是另一个名称空间(意思是使用另一个名称空间的完全限定名称),或者using
通常一个名称空间,using
另一个名称空间使用别名。由于别名比完全限定名称短,因此更容易,更方便。
显然,最好的选择是在不同的名称空间中不要使用相同名称的公共类,特别是如果有人想要在同一个类中使用它们的话。
答案 1 :(得分:5)
例如,您可能在您的类2中使用具有相同名称但位于不同名称空间的其他类。例如:
using TextBoxForms = System.Windows.Forms.TextBox
using TextBoxWeb = System.Web.UI.WebControls.TextBox
答案 2 :(得分:5)
我喜欢将它用于泛型,因为有时将它们写出来可能非常冗长。
using NatMap = System.Collections.Generic.Dictionary<IPAddress, IPAddress[]>;
...
NatMap natMap = new NatMap();
使用功能时:
void PrintNat(NatMap natMap) {
foreach (IPAddress[] addresses in natMap) {
foreach (IPaddress address in addresses) {
// bla bla bla
}
}
}
答案 3 :(得分:3)
从该链接
创建使用别名,以便更容易将标识符限定为命名空间或类型。 using alias指令的右侧必须始终是完全限定类型,而不管之前使用的using指令。
因此您可以从
更改类型Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar
更易于管理的事情,比如
FooBar
特别是如果您有多个名称空间发生冲突
答案 4 :(得分:3)
例如,当您需要来自不同名称空间的两个具有相同名称的类的短名称时,可以使用它。如果指定名称空间,则类名称会发生冲突,因此您可以为它们指定不同的名称:
using ImageControl = System.Windows.Controls.Image;
using Image = System.Drawing.Image;
答案 5 :(得分:3)
使用它有两个很好的理由:
有一个名称冲突(两个类在不同的名称空间中具有相同的名称)。您可以将其中一个替换为更短但同样具有描述性的名称,而不是写出完全限定类型(包括完整命名空间)。
一个。示例:假设您有一个包含类KeyValuePair<TKey, TValue>
的项目,并且您还使用System.Collections.Generic进行其他操作。您可以使用using MyStringIntPair = MyProject.Collections.Generic.KeyValuePair<string, int>
为您的课程设置别名,并且您的代码看起来会更清晰,因为没有MyProject.Collections.Generic
到处都是。
原生互操作。在处理原生long
类型时,我个人认为这非常有用。在大多数操作系统上,long
与指针的大小相同,但在Windows 64位上,它与int相同。因此对于大多数操作系统,我可以将long
表示为IntPtr
,但它需要针对Windows 64位进行更改,因此我创建了一个类型别名并使用预处理程序指令更改了它的定义
一个。 FreeType使用long
相当多,所以当我为它编写绑定时,我必须使其在Windows 64位上运行。我正在考虑基于操作系统的某种动态子类,但预处理器指令和类型别名更简单,现在已经完成了工作。 An example would be the FT_BBox struct, which uses longs
以下FT_BBox结构的简化相关版本:
using System;
using System.Runtime.InteropServices;
#if WIN64
using FT_Pos = System.Int32;
#else
using FT_Pos = System.IntPtr;
#endif
namespace SharpFont.Internal
{
/// <summary>
/// Internally represents a BBox.
/// </summary>
/// <remarks>
/// Refer to <see cref="BBox"/> for FreeType documentation.
/// </remarks>
[StructLayout(LayoutKind.Sequential)]
internal struct BBoxRec
{
internal FT_Pos xMin, yMin;
internal FT_Pos xMax, yMax;
}
}