0

假设我有一个名为“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 不能解决问题。

4

2 回答 2

4

使用指令进行救援。只需为您的班级创建一个别名。

using FooClass = Namespace.Foo;

咔嚓

于 2012-01-31T13:59:07.833 回答
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不一样。

于 2012-01-31T14:53:40.060 回答