我什么时候会在使用指令上使用别名?

时间:2012-04-13 20:43:44

标签: c#

所以我正在阅读MSDN文档并遇到过:

http://msdn.microsoft.com/en-us/library/sf0df423.aspx

使用using指令的别名有什么实际用途?

我得到了什么,我不知道为什么我想要使用它。

6 个答案:

答案 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)

使用它有两个很好的理由:

  1. 有一个名称冲突(两个类在不同的名称空间中具有相同的名称)。您可以将其中一个替换为更短但同样具有描述性的名称,而不是写出完全限定类型(包括完整命名空间)。

    一个。示例:假设您有一个包含类KeyValuePair<TKey, TValue>的项目,并且您还使用System.Collections.Generic进行其他操作。您可以使用using MyStringIntPair = MyProject.Collections.Generic.KeyValuePair<string, int>为您的课程设置别名,并且您的代码看起来会更清晰,因为没有MyProject.Collections.Generic到处都是。

  2. 原生互操作。在处理原生long类型时,我个人认为这非常有用。在大多数操作系统上,long与指针的大小相同,但在Windows 64位上,它与int相同。因此对于大多数操作系统,我可以将long表示为IntPtr,但它需要针对Windows 64位进行更改,因此我创建了一个类型别名并使用预处理程序指令更改了它的定义

    一个。 FreeType使用long相当多,所以当我为它编写绑定时,我必须使其在Windows 64位上运行。我正在考虑基于操作系统的某种动态子类,但预处理器指令和类型别名更简单,现在已经完成了工作。 An example would be the FT_BBox struct, which uses longs

  3. 以下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;
        }
    }