在哪里以及如何使用嵌套类?

Fre*_*ood 10 .net c# nested-class

我想如果一个类只在另一个类中实例化,那么在该类中嵌套使用它是正确的.我认为这将有助于我们良好的设计.当我看到我的项目时,我几乎从未见过这样的嵌套结构.但是,如果我尝试嵌套类,那么这次我脑子里会出现另一个问题.例如

我有Board类,Move类,如ShortCastle,LongCastle,EnPassant,Promote和Pieces,如Pawn,Queen,Rook,Knight等.很明显,Board类将实例化Piece类,Piece类将实例化Move类.对于一个好的设计,Promote移动类应该嵌套Pawn,因为只有pawn可以提升自己.short和long Castles应该嵌套King,因为只有king可以有这样的类型移动.

试图将所有Piece类放入Board类并不是很好的设计,因为8-9类将在Board类中,并且它真的很烦人,一个Board类文件太大而且难以读取.我更喜欢将每个类保持在另一个类中文件.很好,我们可以创建部分董事会类但仍然不烦恼8-9部分董事会类文件将持有每个类的类?最好不要让它们嵌套吗?相同的部分为另一个Move类创建另一个部分Piece文件?如果嵌套类只占用很小的空间,那么它不会有任何问题,但是如果需要很多方法呢?

Tim*_*ter 11

我认为你对嵌套类太慷慨了.看看这个设计原则为嵌套类型.

如果满足以下条件,请不要使用嵌套类型:

  • 该类型必须由客户端代码实例化.如果类型具有公共构造函数,则可能不应嵌套.本指南背后的基本原理是,如果可以实例化嵌套类型,则表明该类型在库中有自己的位置.您可以创建,使用它,并在不使用外部类型的情况下销毁它.因此,它不应该嵌套.内部类型不应在外部类型之外广泛重用,而与外部类型无关.
  • 对类型的引用通常在客户端代码中声明.

这些作品可能属于一个棋盘(作为会员的作品集?)但可以共存而不需要它.你可能想要重复使用没有棋子的棋盘(主题等),也可以重复使用没有棋盘的棋子(职位等).