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是的,有全局名称空间(),但这不是一个好的做法-您应该在任何地方使用名称空间,以免丢失您的工作;)