Почему C# импорт работает только внутри пространства имен - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю в проекте Unity 3D.

Когда я пытаюсь расширить или использовать класс especifi c с именем Ability, среда IDE вынуждает меня выполнить полный импорт класса с помощью добавление пространства имен в объявление.

Это не работает (обычный импорт вне пространства имен):

using CarlaFramework.Opsive.UltimateCharacterController.Scripts.Character.Abilities;


namespace CarlaFramework.uiMonitor {
      public abstract class DoozyViewAbilityMonitor : SerializedMonoBehaviour
      {
         private Ability currentAbility;
      }
}

Это работает (импорт в операторе объявления):

protected CarlaFramework.Opsive.UltimateCharacterController.Scripts.Character.Abilities.Ability currentAbility;

Это также работает (импорт внутри декларации пространства имен):

namespace CarlaFramework.uiMonitor 
{

   using Opsive.UltimateCharacterController.Scripts.Character.Abilities;

   public abstract class DoozyViewAbilityMonitor : SerializedMonoBehaviour
   {
      private Ability currentAbility;
   }
}

Кодовое изображение:

https://imgur.com/QFDrUFR

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Проблема заключалась в том, что у меня было пространство имен, имя которого конфликтовало с именем класса (Ability).

Когда я пытался объявить переменные типа Ability, мне пришлось написать полное пространство имен, чтобы сообщить IDE, что я имел в виду:

protected CarlaFramework.Opsive.UltimateCharacterController.Scripts.Character.Abilities.Ability currentAbility;

Простое переименование пространства имен устраняет проблему.

Вот имя cla sh:

enter image description here

0 голосов
/ 17 апреля 2020

Ваш первый пример не является импортом - это полное имя типа. Вы не можете импортировать такую ​​ссылку на сборку из класса.

Существует два разных значения для using:

  1. В качестве директивы, как будто вы пытаетесь использовать ее (для импорта пространства имен). См. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-directive. Суть в том, что вы не можете импортировать ссылочную строку (в пределах класса или структуры).
  2. Как блок области видимости, который в основном (только?) Используется, чтобы убедиться, что у IDisposable есть метод Dispose() называется. См https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...