C# 如何消除外部类和嵌套类之间的歧义

C# 如何消除外部类和嵌套类之间的歧义,c#,class,unity3d,nested,disambiguation,C#,Class,Unity3d,Nested,Disambiguation,我的一个类叫做SpaceMine,另一个类叫做Ability,其中嵌套了一个类叫做SpaceMine: public class SpaceMine { } public class Ability { public class SpaceMine : Ability { void Foo() { SpaceMine spaceMine; } } } 在Foo()中,我试图声明类型为Space

我的一个类叫做
SpaceMine
,另一个类叫做
Ability
,其中嵌套了一个类叫做
SpaceMine

public class SpaceMine
{

}

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

Foo()
中,我试图声明类型为
SpaceMine
(不是
Ability.SpaceMine
)的变量,但它一直说我的变量类型为
Ability.SpaceMine
。除了更改名称外,如何确保编译器知道我要声明的类型?

我希望您只需使用完整路径即可

我假设SpaceMine在一个名称空间中——如果不是,则需要将整个文件包装在一个名称空间中

然后您可以执行
新建YourNamespace.SpaceMine()
获取父级,或
新建YourNamespace.Ability.SpaceMine()
访问嵌套的


但我不建议这样做,因为可读性受到严重影响。

使用显式声明

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
            }
        }
    }
}

首先,它绝对会破坏可读性,不要在实际项目中使用。最好不要嵌套它们,并使用前缀/后缀,例如SpaceMineAbility。除了偶尔的结构之外,嵌套类每个月都会让你头疼几个小时。你能更具体地说明它是如何破坏可读性和引起头痛的吗?对我来说,它看起来更有条理,更有意义。啊,我明白了。如果我没有弄错的话,是不是有一个
global
名称空间,所有不在名称空间中的类都默认使用这个名称空间?我试过了,但编译器似乎不明白我想做什么。@AgentTatsu是的,有全局名称空间(),但这不是一个好的做法-您应该在任何地方使用名称空间,以免丢失您的工作;)