C#类名称 - 方法名称冲突

时间:2012-01-31 13:55:55

标签: c# name-conflict

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

2 个答案:

答案 0 :(得分:4)

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

using FooClass = Namespace.Foo;

clicky

答案 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.FooMyNamespace.Foo不一样。