繁体   English   中英

私有嵌套静态类 - 好的还是坏的做法?

[英]Private nested static class - Good or bad practice?

在非静态类中嵌套私有静态类是否会被认为是一种不好的做法?

public class Outer
{
    private static class Inner
    {


    }
}

这里的想法是“外部”的所有实例都将共享对静态状态的访问。 另一种方法可能是让 Inner 类为非静态并使用它的静态实例:

public class Outer
{
    private static innerInstance = new Inner(); 

    private class Inner
    {


    }
}

类似的效果。 这种方法的优点/缺点或其他考虑因素是什么?

我必须承认,我几乎从不使用嵌套类,无论是否是静态的,但我对这个特定概念感兴趣。

这两种方法都是完全有效的。

我希望开发人员能更频繁地使用私有嵌套类。 结合 c# 的partial关键字,它使得编写非常复杂的类更易于维护。 想象一下需要构建一个具有小型应用程序复杂性的类 - 当您实际上可以构建一个完整的私有应用程序时,更容易得多,这些类完全是您复杂的外部类的内部类!

我见过的一种非常常见的情况是可枚举- 这些可能非常复杂,尤其是当您开始构建可以链接的自定义迭代器时,例如LINQ 将复杂性隐藏在单个类中正是封装的定义。

如果该类用于多线程应用程序,您可能需要通过锁定来控制对静态状态的访问。 无论是否私下嵌套,这都是静态状态的问题。

这根本没有错,为什么会这样呢?

范围是有限的,因此只有外部类的实例才能访问它,并且它是放置常量和其他公共功能的好地方,这些功能对外部类的功能来说是私有的,而不必一直实例化它。

我不认为这是一种很好的做法。

这取决于Inner类做什么。 如果它只是一个实用程序类静态内部类是可行的。

public class Calculator
{
    private static class HexToDecUtils
    {
        // converter code here
    }
}

换句话说,如果Inner类与其他对象复合,则不应是静态类。

public class Car
{
    private class Engine
    {
        // your code here
    }
}

原则上没有错,但如果您想要一个嵌套的静态类来帮助组织静态状态或方法,这可能是类增长过大的警告信号。 嵌套私有类有很多用途(内部数据结构、传递出的私有接口的私有实现等),但静态私有类实际上只是将事物组合在一起的一种方式。

想象一下需要构建一个具有小型应用程序复杂性的类......使用完全在复杂外部类内部的类

不,不要想象。

只是不要构建具有应用程序复杂性的类,即使是小型应用程序。

通过这样做,您实际上会增加复杂性。

使用单独的类,理想情况下,每个类都有一个单一的职责。

这就是降低复杂性的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM