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中的数据时,我可以清楚地看到它被更改了,这是为什么?在某种程度上,将非静态类放在静态中是不正确的吗?

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

无论您的类是嵌套类还是普通类,每当您执行像GlobalParam.noneStaticClass NewNSC = nsc, NewNSCnsc这样的赋值时,将始终引用相同的对象。

如果您想要一个nsc对象的副本,这里有一些方法:

    如果你的类的所有成员都是value类型,你可以使用struct而不是阶级。每次你做作业时,它都会被复制与。
  • 如果没有,您应该参考对象克隆

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

为了创建一个对象的新实例,你需要这样做:

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