静态类c#中的非静态嵌套类

时间:2014-07-16 07:48:43

标签: c# static

考虑这种情况

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中的数据时,我可以清楚地知道它已被更改,为什么会这样? 没有静态类在静态内部以某种方式不正确吗?

2 个答案:

答案 0 :(得分:2)

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

如果你想要一份nsc对象的副本,可以采用以下方法:

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

答案 1 :(得分:1)

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

为了创建对象的新实例,您需要执行此操作:

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