【发布时间】:2017-02-15 18:38:57
【问题描述】:
在 C# 中,有没有办法从程序集 B 访问程序集 A 中全局命名空间中的公共静态类(假设程序集 B 引用程序集 A),当程序集 B 在全局命名空间中有公共静态类时有相同的名字?例如在程序集 A 中的Bar.cs:
using System.Diagnostics;
// NOTE: No namespace declared here - this is in the global:: ns
public static class Bar
{
public static void DoSomethingSilly()
{
Debug.WriteLine("I'm silly!");
}
}
如何在程序集 B 的 Bar.cs 中使用它?
public static class Bar
{
public static void DoSomethingSilly()
{
// call Bar.DoSomethingSilly() from assembly A here
}
}
我尝试了global::Bar.DoSomethingSilly() 之类的方法,但它在程序集 B 中不起作用(它只是让我将引用返回到程序集 B)。
我也知道我可以使用反射来解决它(类似于Assembly.GetType()),但我更想知道它是否有一些本机 C# 语法。最后,我在程序集 A 中的代码周围添加了一个命名空间,它是我拥有的,并且仅在全局命名空间中,因为它是由另一个工具生成的 - 添加命名空间不会导致任何问题,但我很好奇是否有允许这种引用的语法。
【问题讨论】:
-
在汇编 B 中应该绝对没问题。不需要额外的语法。将通过实际操作进行仔细检查,但应该没有任何问题。
-
啊,我忘了提到一个特殊的皱纹......程序集 B 有另一个同名的静态类。我会更新问题。
-
也在全局命名空间中?在这种情况下,extern alias 就是您所追求的。
-
这正是我想要的,谢谢。
标签: c# .net namespaces .net-assembly