繁体   English   中英

C#类名-方法名冲突

[英]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不能解决问题。

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

using FooClass = Namespace.Foo;

可疑的

您的代码无效,因为您实际尝试的是访问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.FooMyNamespace.Foo是不同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM