静态类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
这样的分配, NewNSC
和nsc
将始终引用相同的对象。
如果您需要nsc对象的副本,可以使用以下方法:
- 如果您的类具有值类型的所有成员,则可以使用结构而不是类。 每次进行作业时都会复制它。
- 如果没有,你应该引用对象克隆
这是因为当您编写GlobalParam.noneStaticClass NewNSC = nsc
时,您没有创建类的新实例GlobalParam.noneStaticClass NewNSC = nsc
您只是将对现有NSC
对象的引用分配给新变量NewNSC
。 因此,当您调用NewNSC
您正在调用与NSC
相同的对象。
要创建对象的新实例,您需要执行以下操作:
GlobalParam.noneStaticClass NewNSC = new GlobalParam.noneStaticClass();