Как устранить неоднозначность между внешним классом и вложенным классом - PullRequest
1 голос
/ 07 марта 2019

У меня есть ситуация, в которой один из моих классов называется SpaceMine, а другой мой класс называется Ability и имеет вложенный в него класс с именем SpaceMine:

public class SpaceMine
{

}

public class Ability
{
    public class SpaceMine :  Ability
    {
        void Foo()
        {
            SpaceMine spaceMine;
        }
    }
}

В Foo() я пытаюсь объявить переменную типа SpaceMine (не Ability.SpaceMine), но она постоянно говорит, что моя переменная имеет тип Ability.SpaceMine.Помимо изменения имен, как я могу убедиться, что компилятор знает, какой тип я пытаюсь объявить?

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Использовать явное объявление

namespace SpaceName
{
    public class SpaceMine
    {

    }

    public class Ability
    {
        public class SpaceMine :  Ability
        {
            void Foo()
            {
                Ability.SpaceMine nestedMine; //Nested
                //Ability is reducant but it improves readability a little
                SpaceName.SpaceMine globalMine; //Not nested
            }
        }
    }
}
0 голосов
/ 07 марта 2019

Полагаю, вам просто нужно использовать полный путь.

Я предполагаю, что SpaceMine находится внутри пространства имен - и если это не так, вам нужно обернуть весь файл в пространство имен.

Затем вы можете сделать new YourNamespace.SpaceMine();, чтобы получить родительский, или new YourNamespace.Ability.SpaceMine(), чтобы получить доступ к вложенному.

Я бы не рекомендовал делать это, так как читаемость сильно пострадала.

...