【问题标题】:Our project makes constant use of static outer classes that have non-static nested classes - might this have any pitfalls?我们的项目不断使用具有非静态嵌套类的静态外部类——这可能有任何陷阱吗?
【发布时间】:2021-01-03 10:17:45
【问题描述】:

我们目前正在开发一个用 C# 编写的 Web-API 项目。它包含许多具有非静态嵌套类的静态外部类。类似的东西

public static class OuterClass
{    
    public class InnerClass : ParentClass
    {
            
    }
}

这个模式在整个项目中经常使用,因此我的问题。使用具有非静态嵌套类的静态外部类是否有任何陷阱?更不用说,在整个应用程序中使用了很多?

【问题讨论】:

  • 静态类除了内部类还有别的吗?
  • 我认为这是“静态类作为命名空间”反模式的一个例子
  • 静态外部类没有成员。它只有 public 内部类。但这些都有成员(即字段、属性、方法等)。
  • 如果你说为什么你在做这件奇怪的事情会很有帮助。这不一定是错的,但如果被要求审查此代码,我需要一个可靠的理由,这很奇怪。
  • 谢谢你的草图;这很有帮助。在批评这种设计选择时,我会问的问题是:与命名空间相比,这种静态类方法产生了哪些引人注目的好处?我没有看到任何伤害,但是如果按照设计使用命名空间没有任何好处,那么我通常会遵循标准设计模式。通常只使用静态类来存储全局有用的方法,尤其是扩展方法。

标签: c# .net webapi


【解决方案1】:
  • 如果只有内部类,而没有字段和方法,则可能首选命名空间而不是那些外部公共静态类。
    • 您可以在静态类(或一般类)中定义字段和方法,但不能在命名空间中定义
    • using 关键字是导入命名空间中定义的所有可访问类型/类的便捷方式,因此您无需完全限定它们。
    • 否则,如果您打算添加成员/方法,那么将它们保留为类是有意义的。
  • 特别是如果项目将用作库,您仍应使用命名空间以避免在全局命名空间中发生冲突。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-01-03
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
相关资源
最近更新 更多