c# - MonoDevelop C# in Unity3D 试图理解 "Warning: type should be declared inside namespace AssembleCSharp"

标签 c# namespaces monodevelop

在脚本文件夹中的 Assets 下,我试图定义一个简单的数据类:

文件:TirggerObject.cs

using UnityEngine;
public class TriggerObject {
    public int TriggerID { get; set;}
    public Vector2 Location { get; set;}
    public float TriggerRadius { get; set;}
}

类名有一个与之相关的警告:“警告:类型应该在命名空间 'AssemblyCSharp' 内声明”

据我所知,AssembleCSharp 是定义类的地方。我看到的唯一奇怪的是 MonoDvelop 主 UI 中的解决方案文件树显示类文件:TriggerObject.cs 在程序集“Assembly-CSharp”中。虽然警告消息称其为“AssemblyCSharp”,但没有破折号。

我假设我可以忍受这个警告,因为代码似乎在运行。但是,我对 Unity 的程序集的了解如此之少感到震惊,而且我找不到这个确切警告的引用。我也没有找到任何关于为什么这还没有在正确的组装中或我如何将它放在正确的组装中的明确解释。

我讨厌不理解警告。

最佳答案

这是因为您的文件实际上位于 Unity 程序集中,但这一事实并未反射(reflect)在您的代码中。当您通过 Unity 的编辑器创建脚本时,恐怕这是 Unity 的“糟糕的自动实践”。当您通过 MonoDevelop 创建新文件时,会自动生成命名空间块。

该问题的解决方案是将命名空间块添加到您的文件中:

namespace AssemblyCSharp {

    using UnityEngine;

    public class TriggerObject {
        public int TriggerID { get; set;}
        public Vector2 Location { get; set;}
        public float TriggerRadius { get; set;}
    }
}

您实际上可以在命名空间块内部或外部放置“using”语句。 Read more about it here .

请注意,将命名空间部分添加到一个文件将迫使您修改所有依赖的代码文件(仅仅是由于类可见性)。

关于c# - MonoDevelop C# in Unity3D 试图理解 "Warning: type should be declared inside namespace AssembleCSharp",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42311021/

相关文章:

c# - 如何读取 Stream 并将其位置重置为零,即使 stream.CanSeek == false

php - 未找到 Laravel 自定义特征

MonoDevelop 中的 Java 控制台错误

c# - Xamarin Studio,GTK 2.0 C# 应用程序,运行时错误,无法加载 libglib-2.0-0.dll

c# - TCP 服务器/客户端的自定义消息框架协议(protocol)

c# - 继承问题,从继承类的某些数据上获取 NULL

C# 从大文本文件中删除重复项

asp.net - 部署后更改 asp.net Web 服务命名空间

python-3.x - Numpy __isub__ 改变全局变量

xamarin.ios - 每个事件/ Action 的 MonoTouch NullReference (SIGSEGV)