【问题标题】:When must we use extern alias keyword in C#?我们什么时候必须在 C# 中使用 extern 别名关键字?
【发布时间】:2011-01-21 18:43:54
【问题描述】:

我们什么时候必须在 C# 中使用extern alias 关键字?

【问题讨论】:

    标签: c# keyword


    【解决方案1】:

    基本上,当您想使用来自不同程序集的具有相同完全限定名称(相同命名空间、相同类型名称)的两种类型时,您才真正需要它。您为每个程序集声明一个不同的别名,然后您可以通过该别名引用它们。

    不用说,你应该尽量避免陷入这种情况:)

    【讨论】:

    • 只是添加 - 即使在 comsumer *.cs 文件的顶部添加了外部别名声明后,编译器默认情况下也不会查找我正在使用的类型(存在于该程序集中).Compiler 的默认行为始终是在当前和引用的具有 global 别名的程序集中搜索类和类型。我最终使用以 extern 别名开头的完全限定类型名称,例如我的外部别名声明是extern alias WidgetsVendor1;,但我仍在编写var wid = new WidgetsVendor1.Widgets.Widget();之类的代码。我不能简单地做-var wid = new Widgets.Widget();
    • @RBT:不,它只是声明别名。但是你可以拥有using WidgetsVendor1.Widgets; 并写var wid = new Widget();
    • 哦。有趣的!我不知道。我根据我早上的观察发布了我的 cmets。很高兴知道。我可以使用 using 关键字在 extern 别名中导入命名空间。谢谢。
    【解决方案2】:

    它可以帮助您摆脱通过版本控制挖出的一个非常深的洞。假设你的程序的第一个版本使用了这个类

    using System;
    
    namespace Acme.Financial.Banking {
      [Serializable]
      public class BankAccount {
        public double Balance { get; set; }
        //...
      }
    }
    

    您一直在用它序列化大量银行账户记录。一位会计师开始抱怨资产负债表减少了十亿分之一美分,所以你换了班:

      public decimal Balance { get; set; }
    

    问题解决了,下一位客户拥有满意的资产负债表。直到您被要求用旧格式的大量序列化记录升级现有客户。大问题,因为类已经改变,你不能再反序列化记录了。

    extern alias 解决了你的问题,你可以在代码中引用旧版本和新版本的类,即使命名空间名称和类名相同。

    【讨论】:

    • 非常有见地的使用外部别名的用例。
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多