【问题标题】:Using two static classes having same name in C#在 C# 中使用两个具有相同名称的静态类
【发布时间】:2012-02-15 06:25:09
【问题描述】:

我有一个包含在我的 C# 项目中的 DLL。我们称之为“one.dll” 此 DLL 包含一个名为“staticclass”的静态类

我有另一个 DLL,我也包含在同一个项目中。我们称它为“two.dll” 该 DLL 还包含一个名为“staticclass”的静态类

现在,当我在我的项目中同时包含两个 DLL 并尝试访问“staticclass”时,它自然会出错。有没有办法我可以更改类的名称或给它某种别名所以让我们说“one.dll”中的“staticclass”将保持原样,我可以给“两个”中的“staticclassTwo”提供别名.dll”

请注意,我无法访问“one.dll”和“two.dll”的源编解码器

【问题讨论】:

  • 你可以使用类的完全限定名——即包含命名空间

标签: c# dll static-classes


【解决方案1】:

(我假设这两个类也在同一个命名空间中。如果不是,这很容易 - 只需使用简单的 using 指令作为别名,或代码中的完全限定名称。)

您确实可以给一个别名 - extern alias。实际上,这将“程序集”添加为另一个级别的命名空间差异。

显然,您应该尽可能避免这种情况,但很高兴 C# 提供了一种在您绝对需要时非常明确的方式。

Anson Horton 有一个 good walkthrough 告诉你如何在实践中使用它们。

【讨论】:

  • 这两个类可能在也可能不在同一个命名空间中。我不知道。我只是在我的项目中添加了该 DLL 的引用,然后当我键入“staticclass”并在其后加一个点时,它会为我提供可用方法和属性的列表。我的意思是我什至没有在顶部声明它的命名空间。只需添加 DLL 并开始使用它的类。
  • Ali 如果您在解决方案资源管理器中打开引用文件夹,您可以双击程序集并在对象浏览器中打开该程序集。这将让您准确查看此程序集具有哪些命名空间以及这些命名空间中的类
  • 对不起,我在之前的评论中犯了一个错误,我实际上是在上面声明命名空间。两个 DLL 中的两个命名空间都是相同的,所以我使用了 Jon Skeet 所说的 extern 别名,它可以工作!谢谢。
【解决方案2】:

您可以通过简单地使用 Alias 来做到这一点。

在您的代码中,就在 namespace 行的下方; 使用别名,如下所示

namespace ConsoleApp
{

    using ClassOne = Assembly.One.MyClass; /* your dll 1 class */
    using ClassTwo = Assembly.Two.MyClass; /* your dll 2 class */

    class Program
    {

        static void Main(string[] args)
        {

            ClassOne one = new ClassOne();
            // Do your stuff with ClassOne object

            ClassTwo two = new ClassTwo();
            // Do your stuff with ClassTwo object

        }
    }
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多