Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在何处以及如何使用嵌套类?_C#_.net_Nested Class - Fatal编程技术网

C# 在何处以及如何使用嵌套类?

C# 在何处以及如何使用嵌套类?,c#,.net,nested-class,C#,.net,Nested Class,我在想,如果一个类只在另一个类中实例化,那么在该类中嵌套使用它是正确的。我认为这将有助于我们进行良好的设计。当我看我的项目时,我几乎从未见过这样的嵌套结构。但如果我尝试嵌套类,那么这次我脑海中会出现另一个问题。例如 我有棋盘类、移动类,如ShortCastle、LongCastle、EnPassant、Promote和棋子,如典当、皇后、车、骑士等。因此很明显,棋盘类将实例化棋子类,棋子类将实例化移动类。对于一个好的设计,升级移动类应该嵌套在Pawn中,因为只有Pawn可以升级自己。短城堡和长城

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

我有棋盘类、移动类,如ShortCastle、LongCastle、EnPassant、Promote和棋子,如典当、皇后、车、骑士等。因此很明显,棋盘类将实例化棋子类,棋子类将实例化移动类。对于一个好的设计,升级移动类应该嵌套在Pawn中,因为只有Pawn可以升级自己。短城堡和长城堡应该嵌套在King中,因为只有King可以进行此类移动


试图将所有工件类放入Board类中看起来不是很好的设计,因为8-9类将位于Board类中,而且一个Board类文件太大且难以读取,这会让人非常恼火。我更喜欢将每个工件类保存在另一个文件中。很好,我们可以创建部分电路板类,但它仍然是恼人的8-9部分电路板类文件将容纳每个工件类?不让它们嵌套是否更好?关于工件相同仅为另一个移动类型类创建另一个部分工件文件?如果嵌套类只占用很小的空间,所以不会有任何问题,但如果它需要很多方法?

我认为您对嵌套类太慷慨了。 看看嵌套类型的设计指南

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

  • 该类型必须由实例化 客户端代码。如果类型具有公共 构造函数,它可能不应该 要嵌套。这背后的理由是什么 准则是如果一个嵌套类型 可以实例化,这表明 该类型在 独立的图书馆。您可以创建 它,使用它,并摧毁它没有 使用外部类型。因此, 不应嵌套。内胎 不应在室外广泛重复使用 属于外部类型的,没有 与外部类型的关系
  • 对类型的引用通常是 在客户端代码中声明

这些作品可能属于某个董事会(作为成员的作品集?),但可以在没有董事会成员的情况下共存。您可能希望重用没有块的板(主题等),也可能重用没有板的板(位置等)。

下一个类方法可以访问父类的私有成员


Nexted类允许减少复杂性,但范围不广。

如果您确实认为嵌套类对您的设计有意义(请参阅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
    {

    }
}
对于一个好的设计,升级移动类应该嵌套在Pawn中,因为只有Pawn可以升级自身


我真的不同意。仅仅因为你可以嵌套类并不意味着你应该嵌套类。问问自己嵌套这些类有什么好处。

嵌套类有自己的位置,但使用起来可能会令人困惑。我发现了一个网页,展示了如何使用一些.Net类来获取Facebook的墙上帖子的JSON输出。这里有趣的是,类嵌套在类中,嵌套在其他类中——因此可以这样做,只是有点复杂。:)

您限制了此设计中出现错误的可能性。任何其他部分都不能创建这样的移动,即使是错误的。此设计不允许这样做。我错了吗?深度嵌套类限制了它们的范围(在某些情况下,这可能是一个有用的架构约束),但您在项目早期就承担了很多复杂性。我建议做“最简单的事情”,然后在需要时重构到更复杂的设计。稍后,如果您想约束某些类可以从何处实例化,可以将解决方案分解为不同的程序集(通过创建“类库”项目)。祝你好运据我所知,本文不是关于嵌套类的,它只是嵌套对象。这是完全不同的。