簡體   English   中英

在另一個程序集中的全局名稱空間中引用公共靜態類

[英]Reference a public static class in the global namespace in another assembly

在C#中, 當程序集B在全局命名空間中具有相同名稱的公共靜態類時 ,是否有一種方法可以從程序集B訪問程序集A 的全局命名空間中的公共靜態類 例如,在裝配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中的代碼周圍添加了一個名稱空間,該名稱空間由我擁有,並且僅在全局名稱空間中,因為它是由另一個工具生成的-添加該名稱空間不會引起任何問題,但是我很好奇是否存在允許這種引用的語法。

感謝@Jon Skeet提供了這一指導-extern別名可以使此工作正常進行。 在引用程序集的屬性上,添加一個別名(例如assemblyA ,或從此處 FooVersion1截取的屏幕截圖中):

屬性窗口示例

,然后在.cs文件頂部添加:

extern alias assemblyA;

然后將允許:

assemblyA::Foo.DoSomethingSilly();
assemblyA.Foo.DoSomethingSilly();

我仍然將名稱空間添加到生成的代碼中-它更直接,並且避免污染全局名稱空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM