静态意味着没有国家

Kan*_*ane 7 c# static state

我最近向一位同事提出建议,指出我们当前的项目(C#)"服务应该是无状态的,因此是静态的".

我的同事同意并表示,在我们的项目中,服务是(并且应该)确实是无国籍的.然而,我的同事不同意静态意味着没有状态,无状态应该意味着静态.

我的问题是"标记为静态的方法是否意味着它不需要任何状态,并且在大多数情况下,无状态方法应该是静态的".

Rex*_*x M 7

静态几乎意味着全球.还有一个实例,在该实例中仍然存在状态,但它是静态实例,这意味着只有一个,所有调用者总是引用那个.

  • @Rex,我不认为将类定义称为类的"实例"在技术上是准确的.堆本身没有数据结构.静态变量存储在类定义本身中,它不是类的"实例".当你编写一个单例时,只创建了一个实例...类定义(存储静态字段的地方,不是另一个第二个实例......当没有实例为"new"时) class,该类有一个或多个静态变量并不意味着它有一个"实例"... (6认同)
  • @Charles我认为这是一个哲学讨论,而不是存储字节的地方. (4认同)
  • @Rex,我想我可以同意这种描述,但如果你的意思是暗示它不重要,我会礼貌地问你重新考虑.这种区别肯定会产生更多的后果,即存储字节的位置.实例可以消失(当它们被垃圾收集时),并且它们的实例级值与它们一起使用.静态字段与类定义一起存储,类定义不是实例,因为它永远不会消失,具有永久生命周期(直到AppDomain卸载) (2认同)

And*_*ena 5

标记为静态的方法是否意味着它不需要任何状态

1)否.您不能说静态方法意味着它不需要状态,因为静态方法可以访问静态/单例资源.

大多数情况下,无状态方法应该是静态的

2)是的.因此,不需要状态的方法通常不需要实例,通常应该是静态的.