在C#中,什么时候必须使用extern alias
关键字?
基本上,只有在您要使用来自不同程序集的具有相同完全限定名称(相同命名空间,相同类型名称)的两种类型时才真正需要它。您为每个程序集声明一个不同的别名,因此可以通过该别名引用它们。
不用说,最好一开始就避免陷入这种情况 :)
它的存在是为了帮助您从版本控制所挖的深坑中脱身。例如,假设您的程序的第一个版本使用了这个类:
using System;
namespace Acme.Financial.Banking {
[Serializable]
public class BankAccount {
public double Balance { get; set; }
//...
}
}
而你一直在使用它序列化许多银行账户记录。突然一个会计开始抱怨资产负债表的差异达到了十亿分之一分之一美分,于是你修改了这个类:
public decimal Balance { get; set; }
问题已解决,下一个客户的资产表很快乐。直到你被要求升级一个使用旧格式大量序列化记录的现有客户。这是个大问题,因为类已经发生了改变,所以无法再反序列化记录。
extern alias 可以解决你的问题,在你的代码中可以引用旧版本和新版本的类,即使命名空间和类名相同。
extern alias WidgetsVendor1;
,但我仍然要编写这样的代码:var wid = new WidgetsVendor1.Widgets.Widget();
。我不能简单地这样做-var wid = new Widgets.Widget();
。 - RBTusing WidgetsVendor1.Widgets;
,然后编写var wid = new Widget();
。 - Jon Skeet