假设我有一个名为'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不能解决这个问题。
答案 0 :(得分:4)
答案 1 :(得分:2)
您的代码不起作用,因为您实际尝试的是访问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
不一样。