簡體   English   中英

C#類名-方法名沖突

[英]C# class name - method name collision

假設我有一個名為“ Foo”的類,具有一些靜態成員,而在其他一些類(位於相同名稱空間下)中,有一個具有相同名稱的工廠方法,該方法使用該成員:

namespace MyNamespace
{
    public class Foo
    {
        public static bool Invert = false;
        public int A {get; set;}
        ....
    }

    public class FooFactory
    {
        public Foo Foo(int A) 
        {
           if(Foo.Invert) // --> this gives the 'is a 'method', which is not valid in the   given context' Error
              return new Foo(-A);
           else
              return new Foo(A);
        }
    }
}

(為簡潔起見,省略了一些代碼)。 顯然,編譯器不會將“ if”子句中的“ Foo”解釋為類“ Foo”,而是解釋為工廠方法。 假設我無權更改類名或工廠方法名,可以強制編譯器將“ Foo”識別為類名而不是方法名嗎?

編輯抱歉,您之前沒有提到它-兩個類都在同一個命名空間中,因此MyNamespace.Foo.Invert不能解決問題。

使用指令進行救援。 只需為您的班級創建一個別名即可。

using FooClass = Namespace.Foo;

可疑的

您的代碼無效,因為您實際嘗試的是訪問MyNamespace.FooFactory.Foo方法,就像它是一個類一樣。 如果指定MyNamespace.Foo ,則將指定所需的類。

namespace MyNamespace 
{ 
    public class Foo 
    { 
        public static bool Invert = false; 
        public int A {get; set;} 
        .... 
    } 

    public class FooFactory 
    { 
        public Foo Foo(int A)  
        { 
           if(MyNamespace.Foo.Invert)
              return new MyNamespace.Foo(-A); 
           else 
              return new MyNamespace.Foo(A); 
        } 
    } 
} 

這將起作用。

關於您的EDIT, MyNamespace.FooFactory.FooMyNamespace.Foo是不同的。

暫無
暫無

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

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