C#嵌套类,清理声明

C#嵌套类,清理声明,c#,class,declaration,C#,Class,Declaration,在C#中有没有办法整理下面的类声明 namespace Application.Namespace { public class MasterClass { public class FlyingSaucer { public class Rotator { public class Cube { 仍然保持类结构,只是清理声明。不-考虑

在C#中有没有办法整理下面的类声明

namespace Application.Namespace
{
    public class MasterClass
    {
        public class FlyingSaucer
        {
            public class Rotator
            {
                public class Cube
                {

仍然保持类结构,只是清理声明。

不-考虑到有4个嵌套级别,它已经相当整洁了

但几乎可以肯定的是,你不应该从4个层次的筑巢开始。你为什么要这么做?您有一个名为
subclass 1
的类,它不是正常意义上的子类(即派生自另一个特定类;
subclass 1
仅派生自
object


嵌套类是相当罕见的——我想我甚至没有见过三个嵌套级别,更不用说四个了。为什么你认为这是一个好主意?

不-考虑到你已经有了4个嵌套级别,它已经相当整洁了

但几乎可以肯定的是,你不应该从4个层次的筑巢开始。你为什么要这么做?您有一个名为
subclass 1
的类,它不是正常意义上的子类(即派生自另一个特定类;
subclass 1
仅派生自
object


嵌套类是相当罕见的——我想我甚至没有见过三个嵌套级别,更不用说四个了。为什么你认为这是个好主意?

看起来你把继承和子类混淆了


子类通常是相当罕见的。

看起来你把继承和子类混淆了


次级分类通常相当罕见。

这两者之间有什么关系吗

FlyingSaucer-->Rotator-->立方体,我认为它是一个典型的包容示例

FlyingSaucer包含旋转器,旋转器包含立方体

<如果是这样的话,你可以考虑通过在旋转碟中创建旋转体和立方体的属性来使用构图。

可以在创建对象FlyingSaucer时注入这些依赖项。这将删除类中非常深的嵌套,我认为,您可能需要从主类访问FlyingSaucer、Rotator、Cube等对象


因此,在这里使用组合,它将使您的类层次结构更加简单,易于扩展和维护。

它们之间有什么关系吗

FlyingSaucer-->Rotator-->立方体,我认为它是一个典型的包容示例

FlyingSaucer包含旋转器,旋转器包含立方体

<如果是这样的话,你可以考虑通过在旋转碟中创建旋转体和立方体的属性来使用构图。

可以在创建对象FlyingSaucer时注入这些依赖项。这将删除类中非常深的嵌套,我认为,您可能需要从主类访问FlyingSaucer、Rotator、Cube等对象


因此,在这里使用组合,它将使您的类层次结构更加简单,易于扩展和维护。

谢谢Jon的回复。不要担心类名本身,这只是为了说明我的观点。至于为什么我们有四个层次的筑巢。。。。嗯,好问题!为什么嵌套到四个级别会被视为“坏习惯”?@Guamez。当嵌套类是公共类时,就像这里一样,调用代码在语法上很难理解,因为必须使用最外层类的完整路径,因为不能将其声明为名称空间(即.NET意义上的“名称空间”,外部类名也是一般意义上的“名称空间”)。这也是一种难闻的气味,因为你很可能最终迫使某人从外部阶级的角度来思考,即使在当时这不是他们关心的问题。有了私人课程就不那么尴尬了,我过去肯定至少上过3级。。。。。。但在这些情况下,内部类的存在纯粹是为了向类提供更进一步的内容,或者没有逃逸该类,或者只是通过实现一个公开定义的接口来实现(在某些情况下,
IEnumerable
的私有实现作为一个内部类,其中包含
IEnumerator
的私有实现,可能非常简洁)@Guamez:你通常应该默认不嵌套类…除非你有充分的理由,否则你通常应该在名称空间中使类成为顶级。谢谢你的回答Jon。不要担心类名本身,这只是为了说明我的观点。至于为什么我们有四个嵌套级别…嗯,好问题!为什么w嵌套到四个级别被视为“糟糕的做法”@Guamez。当嵌套类是公共的时,正如它们在这里一样,调用代码在语法上很难理解,因为必须使用最外层类的完整路径,因为不能将其声明为命名空间(即“命名空间”)在.NET意义上,外部类名也是一般意义上的“名称空间”)。这也是一种坏味道,因为你很可能最终迫使某人从外部阶级的角度思考,即使当时这不是他们关心的问题。对于私人阶级来说,它不那么尴尬,我过去肯定至少上过3级……但在这种情况下,内部阶级的存在纯粹是为了给班级提供一些东西s更进一步,要么没有逃逸该类,要么只是通过实现一个公开定义的接口(在某些情况下,
IEnumerable
的私有实现作为一个内部类,其中有一个
IEnumerator
的私有实现,可以非常整洁)@Guamez:你通常应该默认不嵌套类…除非你有充分的理由,否则你通常应该在名称空间中使类成为顶级。嗯,我很清楚,如何整理声明。立方体的1行声明或移除嵌套复杂性。谢谢,我已经喜欢反馈了,老实说,我想我们会进行调查为什么我们需要如此复杂的嵌套嗯,我很清楚,如何整理声明。1行多维数据集声明或删除嵌套复杂