考虑这种情况
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中的数据时,我可以清楚地知道它已被更改,为什么会这样? 没有静态类在静态内部以某种方式不正确吗?
答案 0 :(得分:2)
无论您的班级是嵌套班级还是普通班级,只要您执行GlobalParam.noneStaticClass NewNSC = nsc
之类的分配,NewNSC
和nsc
将始终引用相同的对象。
如果你想要一份nsc对象的副本,可以采用以下方法:
答案 1 :(得分:1)
这是因为在编写GlobalParam.noneStaticClass NewNSC = nsc
时,您没有创建类的新实例,而只是将现有NSC
对象的引用分配给新变量NewNSC
。因此,当您致电NewNSC
时,您正在调用与NSC
相同的对象。
为了创建对象的新实例,您需要执行此操作:
GlobalParam.noneStaticClass NewNSC = new GlobalParam.noneStaticClass();