我在想,如果一个类只在另一个类中实例化,那么在该类中嵌套它是正确的。我认为这将有助于我们良好的设计。当我看到我的项目时,我几乎从未见过这样的嵌套结构。但是如果我尝试嵌套类,那么这次我脑子里会出现另一个问题。例如
我有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文件?如果嵌套类只占用很小的空间,那么它就不会有任何问题,但是如果需要很多方法呢?
答案 0 :(得分:11)
我认为你对嵌套类过于慷慨。 查看嵌套类型的this设计指南。
如果满足以下条件,请不要使用嵌套类型:
这些作品可能属于一个棋盘(作为会员的作品集?)但可以在没有它的情况下共存。你可能会说。想要重复使用没有棋子的棋盘(主题等),也可以在没有棋盘的情况下重复使用棋子(等等)。
答案 1 :(得分:2)
嵌套类方法可以访问父类中的私有成员。
嵌套类允许在没有广泛范围的情况下降低复杂性。
答案 2 :(得分:1)
对于一个好的设计,Promote移动类应该嵌套Pawn,因为只有pawn可以自我提升。
我真的不同意。仅仅因为你可以嵌套类并不意味着你应该这样做。问问自己嵌套这些课程会带来什么好处。
答案 3 :(得分:0)
如果你真的,真的认为嵌套类对你的设计有意义(参见Tim Schmelter的箴言),但觉得文件大小太大,使用分段类可以将嵌套类定义拆分成自己的文件。或者,如果嵌套类本身足够小但你有大量嵌套类,则将所有嵌套类放入一个部分文件中。
Parent.cs:
public partial class Parent
{
void SomeMethod()
{
Nested1 n1 = new Nested1();
Nested2 n2 = new Nested2();
}
}
Nested.cs:
public partial class Parent
{
private class Nested1
{
}
private class Nested2
{
}
}
答案 4 :(得分:0)
嵌套类有它们的位置,但可能会让人感到困惑。我发现了一个网页,显示了如何使用一些.Net类来获取Facebook在http://www.virtualsecrets.com/graph-api-json-facebook-handler.html的墙上帖子的JSON输出。这里有趣的是,类嵌套在类的内部,在其他类中 - 所以它可以是做完了,有点复杂。 :)