Имя класса C # - столкновение имени метода - PullRequest
0 голосов
/ 31 января 2012

Скажем, у меня есть класс с именем '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);
        }
    }
}

(Некоторый код был опущен для краткости).Очевидно, что компилятор интерпретирует не 'Foo' в предложении 'if' как класс 'Foo', а как метод фабрики.Предполагая, что я не могу изменить имя класса или имя метода фабрики, могу ли я заставить компилятор распознавать 'Foo' как имя класса, а не имя метода?

EDIT Извините, что не упомянул об этом раньше - оба класса находятся в одном и том же пространстве имен, поэтому MyNamespace.Foo.Invert не работает.

Ответы [ 2 ]

4 голосов
/ 31 января 2012

используя директиву для спасения.Просто создайте псевдоним для вашего класса.

using FooClass = Namespace.Foo;

clicky

2 голосов
/ 31 января 2012

Ваш код не работает, потому что на самом деле вы пытаетесь получить доступ к методу 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.Foo и MyNamespace.Foo не совпадают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...