Как получить доступ к вложенным пространствам имен, чтобы избежать необходимости полной квалификации в .NET - PullRequest
1 голос
/ 08 мая 2019

Я чувствую, что здесь упускаю что-то очевидное, но эта проблема преследовала меня некоторое время.

Я определяю некоторые классы в паре разных вложенных пространств имен:

namespace Awesome.Example {

    namespace V1 {
        public class PopTart {
            public bool PoppinUp {get; set;}
            public bool Hot {get; set;}
        }
    }

    namespace V2 {
        public class PopTart {
            public bool PoppinUp {get; set;}
            public bool SoCool {get; set;}
            public bool AreHot {get; set;}
        }
    }

}

Но если я попытаюсь упростить объявление с помощью include, IDE (VS) пожалуется, что мне нужно полностью квалифицировать классы.

Например:

using Awesome.Example;

public class Main {

    public V1.PopTart Strawberry {get; set;}
    public V2.PopTart Blueberry  {get; set;}

}

Это приводит к двум ошибкам:

The type or namespace name 'V1' could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name 'V2' could not be found (are you missing a using directive or an assembly reference?)

Я не понимаю, почему это так. Может кто-нибудь объяснить, как добиться того, что я после?

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

Попробуйте использовать псевдонимы пространства имен, например:

using V1 = Awesome.Example.V1;
using V2 = Awesome.Example.V2;

public class Main
{
    public V1.PopTart p1 { get; set; }
    public V2.PopTart p2 { get; set; }

}

Или полностью квалифицировать ваше пространство имен следующим образом:

public class Main
{
    public Awesome.Example.V1.PopTart p1 { get; set; }
    public Awesome.Example.V2.PopTart p2 { get; set; }
}

Для дальнейшего объяснения и примеров обратитесь к следующему вопросу: Вложенные пространства имен

0 голосов
/ 08 мая 2019

Попробуйте использовать полное пространство имен с вложенным пространством имен, например

public class Main
{
    public Awesome.Example.V1.PopTart var1{get; set;}
    public Awesome.Example.V2.PopTart var2{get; set;}
}
...