C# 为什么C导入只在名称空间内工作

C# 为什么C导入只在名称空间内工作,c#,unity3d,C#,Unity3d,我在Unity 3D项目中工作 当我尝试扩展或使用一个名为Ability的特殊类时,IDE强制我通过将名称空间添加到声明中来完成该类的完整导入 这不适用于命名空间外的正常导入: using CarlaFramework.Opsive.UltimateCharacterController.Scripts.Character.Abilities; namespace CarlaFramework.uiMonitor { public abstract class DoozyView

我在Unity 3D项目中工作

当我尝试扩展或使用一个名为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;
   }
}
代码图像:


您的第一个示例不是导入,而是类型的完全限定名。不能从类中导入这样的程序集引用

使用有两种不同的含义:

作为指令,就像您试图使用它来导入命名空间一样。看见要点是不能在类或结构中内联导入引用。 作为范围块,哪一个主要是?用于确保IDisposable已调用其Dispose方法。看见
问题是,我有一个名称空间,它的名称与类的名称冲突

当我试图声明Ability类型的变量时,我必须编写完整的名称空间,让IDE知道我的意思:

protected CarlaFramework.Opsive.UltimateCharacterController.Scripts.Character.Abilities.Ability currentAbility;
只需重命名名称空间,问题就解决了

名称如下:


视频中显示的实际错误只出现了几分之一秒,需要仔细暂停以查看它所说的内容。看起来像是导入。。。和其他缺失的参考文献,其中。。。是包含类型的程序集。因此,如果您告诉它导入该引用,它会将该程序集添加到您的项目中,然后您应该能够以任何方式引用它。对于视频,很抱歉。是的,它建议“在文件中导入缺少的引用”,这样做的目的是在声明语句中写入类的完整名称空间。我想使用关键字导入它,但它不接受。这里:在图像中,您可以看到我有using,而名称空间有class。但是IDE只是不接受它。请分享一个我希望我可以的遗嘱,但我不知道如何重现错误。我最近发现的唯一一件事是,如果我在名称空间内使用进行导入,那么它就会工作。外面不要。我明白,也许我的话选得不好。我的问题是,为什么这个行为发生在那个名称空间而不是其他名称空间?在这里我有一个图像,在这里我引用了其他完全限定的名称,没有任何问题在屏幕截图中发生了两件事:a灰色文本只是Visual Studio告诉您名称空间没有在任何地方使用,b您的文件名称空间隐藏了类的名称。所以,VS不知道你指的是名称空间能力还是名为能力的类。我隐藏了类的名称,因为我有另一个名为Ability的命名空间,所以当我尝试创建导入附加程序时,必须完成完整的命名空间以避免冲突。如果你用这个修改你的答案,我会把它标记为接受。谢谢你,泰森,你太棒了@Haytam95可能会更好,如果你能像你说的那样自我回答这个问题,但是再详细一点。如果您这样做,我将对其进行编辑,以扩展我认为您遗漏的内容或我认为值得强调的内容。仅供将来参考,如果您使用Foo.MySpace.Ability这样的名称空间,您也可以看到这一点。这种语法是一种快速的定义方法。仅供参考。