所以我正在阅读 MSDN 文档并遇到:
http://msdn.microsoft.com/en-us/library/sf0df423.aspx
using
对指令使用别名有什么实际用途?
我明白它的作用,我只是不明白为什么我想使用它。
所以我正在阅读 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
}
}
}
从那个链接
创建 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;
使用它有两个非常好的理由:
存在名称冲突(两个具有相同名称的不同名称空间中的类)。除了写出完全限定的类型(包括完整的命名空间)之外,您还可以将其中一个别名改为一个更短但同样具有描述性的名称。
一种。示例:假设您有一个包含类的项目,KeyValuePair<TKey, TValue>
并且您还将 System.Collections.Generic 用于其他内容。你可以给你的类起别名using MyStringIntPair = MyProject.Collections.Generic.KeyValuePair<string, int>
,你的代码看起来会更干净,因为没有MyProject.Collections.Generic
到处都是。
本机互操作。long
在处理本机类型时,我个人发现这非常有用。在大多数操作系统上,along
与指针大小相同,但在 Windows 64 位上,它与 int 相同。所以对于大多数操作系统,我可以将 a 表示long
为IntPtr
,但它需要为 Windows 64 位更改,所以我创建了一个类型别名并使用预处理器指令更改它的定义。
一种。FreeType 使用long
了很多,所以当我为它编写绑定时,我必须让它在 Windows 64 位上也能工作。我正在考虑某种基于操作系统的动态子类化,但预处理器指令和类型别名更简单,现在可以完成工作。一个例子是 FT_BBox 结构,它使用 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;
}
}