簡體   English   中英

解決相同命名空間中的定義沖突

[英]Resolving the Conflict of definitions in same namespaces

我在 2 個不同的命名空間中定義了 2 個相同的命名類,我想在我的 c# 文件中將這兩個命名空間作為 using 語句包括在內,如下所示:

using A.B;
using C.B;

假設ABC.B都有class foo的定義,其中之一將根據如下檢查使用:

if(check)
{
   // Use A.B ones class foo
}
else
{
   // Use C.B ones class foo
}

做這個的最好方式是什么?

PS 我不能更改類的名稱。

可以選擇為名稱空間或類型創建別名。 這稱為使用別名指令

using ABFoo = A.B.Foo;
using CBFoo = C.B.Foo;

if (check)
{
    ABFoo foo = new ABFoo(); // Use A.B ones class foo
}
else
{
    CBFoo foo = new CBFoo(); // Use C.B ones class foo
}

或使用完全限定的 class 名稱:

if (check)
{
    A.B.Foo foo = new A.B.Foo(); // Use A.B ones class foo
}
else
{
    C.B.Foo foo = new C.B.Foo(); // Use C.B ones class foo
}

您可以將完全限定的 class 名稱與命名空間一起使用

if (check)
{
    var foo = new A.B.Foo();
}
else
{
    var foo = new C.B.Foo();
}

假設,您在 NameSpaceA 中有一個 class Foo

namespace NameSpaceA
{
    class Foo
    {
        public string Sample { get; set; }
    }
}

並且您在 NameSpaceB 中也有 class Foo

namespace NameSpaceA
{
    class Foo
    {
        public string Sample { get; set; }
    }
}

現在你可以像這樣在 main 方法中使用這個 class

using AFoo = NameSpaceA.Foo;
using BFoo = NameSpaceB.Foo;
if(check)
{
   AFoo afo = new AFoo();
}
else
{
   BFoo bFoo = new BFoo();
}

它被稱為別名Aliasing

您也可以使用這種方式。 它被稱為完全限定名稱鏈接

if(check)
{
   NameSpaceA.Foo afo = new NameSpaceA.Foo();
}
else
{
   NameSpaceB.Foo bFoo = new NameSpaceB.Foo();
}

如果這對您有幫助,請 select 作為正確答案。 它將幫助社區。

暫無
暫無

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

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