[英]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不能解決問題。
您的代碼無效,因為您實際嘗試的是訪問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.Foo
和MyNamespace.Foo
是不同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.