c#静态类中没有静态嵌套类
本文关键字:静态 嵌套 静态类 | 更新日期: 2023-09-27 18:13:05
考虑这个场景
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
之后我使用Method Like that
void DoSomething(GlobalParam.noneStaticClass nsc)
{
GlobalParam.noneStaticClass NewNSC = nsc
//Some manipulation in NewNSC
}
现在当我检查存储在NSC中的数据时,我可以清楚地看到它被更改了,这是为什么?在某种程度上,将非静态类放在静态中是不正确的吗?
无论您的类是嵌套类还是普通类,每当您执行像GlobalParam.noneStaticClass NewNSC = nsc
, NewNSC
和nsc
这样的赋值时,将始终引用相同的对象。
如果您想要一个nsc对象的副本,这里有一些方法:
- 如果你的类的所有成员都是value类型,你可以使用struct而不是阶级。每次你做作业时,它都会被复制与。
- 如果没有,您应该参考对象克隆
这是因为当您编写GlobalParam.noneStaticClass NewNSC = nsc
时,您没有创建类的新实例,您只是将对现有NSC
对象的引用分配给新变量NewNSC
。因此,当您调用NewNSC
时,您调用的是与NSC
相同的对象。
为了创建一个对象的新实例,你需要这样做:
GlobalParam.noneStaticClass NewNSC = new GlobalParam.noneStaticClass();