C#类名称 - 方法名称冲突
假设我有一个名为'Foo'的类,有一些静态成员,并且在其他一些类中(在同一个名称空间下)有一个名称相同的工厂方法,它使用此成员:C#类名称 - 方法名称冲突
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);
}
}
}
这将工作。
关于你的编辑,MyNamespace.FooFactory.Foo
和MyNamespace.Foo
是不一样的。
呃,一旦我看到它就很明显。我会考虑避免夜间... :-) – bavaza 2012-01-31 19:12:18
或者直接使用ns:'if(Namespace.Foo.Invert)...' – 2012-01-31 14:17:56
类Foo和FooFactory是哪些命名空间的成员?试图指定名称空间的名称,例如'if(Namespace.Foo.Invert)'? – 2012-01-31 13:59:21