静态类c#中没有静态嵌套类

考虑这种情况

Public static Class GlobalParam { //static classes strings int and more... class NoneStaticClass { //some noneStatic params } } 

在另一个class (无静态)中,我以这种方式调用NoneStaticClass的实例

 GlobalParam.noneStaticClass NSC = new GlobalParam.noneStaticClass(); //some manipulation on NSC params 

后来我使用像那样的方法

 void DoSomething(GlobalParam.noneStaticClass nsc) { GlobalParam.noneStaticClass NewNSC = nsc //Some manipulation in NewNSC } 

现在,当我检查存储在NSC中的数据时,我可以清楚地知道它已被更改,为什么会这样? 将静态类放在静态中是不是以某种方式不正确?

无论您的类是嵌套类还是普通类,只要您执行像GlobalParam.noneStaticClass NewNSC = nsc这样的分配, NewNSCnsc将始终引用相同的对象。

如果您需要nsc对象的副本,可以使用以下方法:

  • 如果您的类具有值类型的所有成员,则可以使用结构而不是类。 每次进行作业时都会复制它。
  • 如果没有,你应该引用对象克隆

这是因为当您编写GlobalParam.noneStaticClass NewNSC = nsc时,您没有创建类的新实例GlobalParam.noneStaticClass NewNSC = nsc您只是将对现有NSC对象的引用分配给新变量NewNSC 。 因此,当您调用NewNSC您正在调用与NSC相同的对象。

要创建对象的新实例,您需要执行以下操作:

GlobalParam.noneStaticClass NewNSC = new GlobalParam.noneStaticClass();