我什么时候会在使用指令上使用别名
本文关键字:别名 指令 什么时候 | 更新日期: 2023-09-27 18:30:58
所以我正在阅读MSDN文档并遇到:
http://msdn.microsoft.com/en-us/library/sf0df423.aspx
对using
指令使用别名的实际用途是什么?
了什么,我只是不明白为什么我想使用它。
如果在两个不同的命名空间中具有同名的类,这将非常有用。 当这种情况发生时,你有两个选择。 using
一个命名空间而不是另一个命名空间(意味着对另一个命名空间使用完全限定名称),或者正常using
一个命名空间,并使用别名using
另一个命名空间。 由于别名比完全限定的名称短,因此它仍然更容易、更方便。
显然,最好的选择是不要在不同的命名空间中使用同名的公共类,特别是如果有人想在同一类中使用两者。
您可能在类 2 中使用了其他名称相同但命名空间不同的类。例如:
using TextBoxForms = System.Windows.Forms.TextBox
using TextBoxWeb = System.Web.UI.WebControls.TextBox
将其用于泛型,因为有时将它们写出来可能非常冗长。
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
}
}
}
使用它有两个很好的理由:
-
存在名称冲突(两个类位于具有相同名称的不同命名空间中)。您可以改用更短但同样具有描述性的名称,而不是写出完全限定的类型(包括完整的命名空间)。
a. 示例:假设您有一个包含类
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位,它需要更改,因此我创建了一个类型别名并使用预处理器指令更改其定义。a. FreeType使用了很多
long
,所以当我为它编写绑定时,我必须让它在Windows 64位上运行。我正在考虑某种基于操作系统的动态子类化,但预处理器指令和类型别名更简单,现在可以完成工作。一个例子是使用 long 的 FT_BBox 结构。
下面 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;
}
}
从该链接
创建 using 别名,以便更轻松地将标识符限定为命名空间或类型。using 别名指令的右侧必须始终是完全限定的类型,而不考虑其前面的 using 指令。
因此,您可以将类型从
Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar
到更易于管理的东西,例如
FooBar
特别是如果您有多个冲突的命名空间
当您需要来自不同命名空间的两个具有相同名称的类的短名称时,可以使用它。如果指定命名空间,则类名会冲突,因此可以为其指定不同的名称:
using ImageControl = System.Windows.Controls.Image;
using Image = System.Drawing.Image;