public class MyClass
{
MyClass OldValue; //用来保存副本,将来在这个里面可以取旧值 string a="aaa";
int n=0;
}//前提条件是:经过一系列的操作最后我得到了MyClass一个对象(myclass1)的所有值(包括值类型和引用类型)
//我现在想把myclass1复制一下(深度复制,断开所有引用,只保留当前值)赋给自身对象中的MyClass OldValue,如何操作//注:也就是说将来myclass1对象中的 string a 值变成"bbb"后,我仍然能取出MyClass OldValue中的原"aaa"值解决问题马上结帖
{
MyClass OldValue; //用来保存副本,将来在这个里面可以取旧值 string a="aaa";
int n=0;
}//前提条件是:经过一系列的操作最后我得到了MyClass一个对象(myclass1)的所有值(包括值类型和引用类型)
//我现在想把myclass1复制一下(深度复制,断开所有引用,只保留当前值)赋给自身对象中的MyClass OldValue,如何操作//注:也就是说将来myclass1对象中的 string a 值变成"bbb"后,我仍然能取出MyClass OldValue中的原"aaa"值解决问题马上结帖
解决方案 »
- 如何让进程显示窗体 无窗体句柄
- C#如何打开正在读写的文件?
- c# 应用程序的问题
- 如何打开一张图片,作为窗体背景?用的是C#
- 关于VS2008里创建WPF应用程序时,属性窗口里事件按钮没有了怎么解决
- 如何随机选择颜色?
- Js的document.write问题,非常奇怪的问题,疑似IE6的BUG,有人遇到过吗?
- C#编译的Form程序在 xp64位英文Sp2系统上提示错误"Activex部件不能创建对象"
- 引用excel 11.0的com控件时的问题
- System.Web.Mail类是否需要SMTP支持20分大送?????????????
- 还是datagrid的问题
- C#中关于dataGrid问题..
MyClass OldValue = new MyClass();//并且把当前myclass1直接赋给OldValue
OldValue = this;//那么将来myclass1中的引用类型值改变之后OldValue中的值同样会改变,因为内存地址是相同的
public class MyClass
{
MyClass OldValue; //用来保存副本,将来在这个里面可以取旧值string a="aaa";
public string A
{
get{ return a;}
set{ a = value;}
}int n=0;
public int N
{
get{ return n;}
set{ n = value;}
}// provide class copy function
public override MyClass Copy()
{
MyClass newObject = new MyClass();
newObject.A = this.a;
newObject.N = this.n;
return newObject;
}
}
{
MyClass OldValue; //用来保存副本,将来在这个里面可以取旧值
public MyClass OLD_Value
{
get{ return OLD_Value.Copy();}
set{ OldValue = value.Copy();}
}
string a="aaa";
public string A
{
get{ return a;}
set{ a = value;}
}int n=0;
public int N
{
get{ return n;}
set{ n = value;}
}// provide class copy function
public override MyClass Copy()
{
MyClass newObject = new MyClass();
newObject.A = this.a;
newObject.N = this.n;
return newObject;
}
}
newObject.N = this.n;//这样的逐一赋值方式在我这行不通,因为我的所有属性都是在派生类中存在的,我现在根本不知道有哪些属性,除非使用反射的方法进行循环,不过这样太麻烦//还有别的方式吗?这个不是唯一解决路径吧?多谢,大家帮忙
顺便问个弱智的问题,在基类中获取当前派生类的对象名是不是this关键字?我打算使用反射逐一赋值。
谢
(条件是不想在派生类中让操作者自己实现,我想把clone的过程封装起来)