自定义的类:
public myRequest
{
HttpWebRequest request=null;
//其他代码省略
}
向实现 myrequest 的深度复制。
也就是 对成员request可以深度复制。 因为 HttpWebRequest 是net 自带的对象,它的成员有很多是对象。。
所以如何保证 HttpWebRequest 全部深度复制到
c#通用deep copy:
public static T DeepClone<T>(T obj) { using (var ms = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); ms.Position = 0; return (T) formatter.Deserialize(ms); } }
你可以做成一个扩展方法,这样很容易对任何对象进行deep clone。另外,用于deep copy的对象必须是[Serializable]的
@dudu: 我这个答案是以代码结尾的,刚才我想修改它,在代码之后加点非代码的话,ms是件很麻烦的事情。。
@水牛刀刀: 这个是通用的?
@水牛刀刀: 序列化? MS msdn 里面的 clone() 这个方法可以实现吗
@水墨.MR.H: 你试试我说的方法吧。。。
@水牛刀刀: 序列化的方法当然可以。但是我想知道通过 MSDN 上的ICloneable 接口实现clone()方法如何实现 深度复制
@水墨.MR.H: 不建议使用IClonable接口,因为这个接口名字无法让调用者意识到是深复制还是浅复制。并且,就算你用这个接口,具体实现依然可以用上面我提供的那个方法(当你自己写一个类的时候)。再退一步,你并不能修改HttpWebRequest类的代码,因此你说“通过IClonable接口实现“这种说法是不对的,也是不可行的。
没法复制。如果你能理解它跟NetworkStream,HttpWebResponse有关系的话,你应该会放弃这种做法。
你应该反问自己,你为什么想要对它做深度复制?
也许他只是想获取另外一个一模一样的实例对象,两者之间的修改不互相影响。
想获取另外一个一模一样的实例对象,两者之间的修改不互相影响
@水墨.MR.H: 为什么想要获取另外一个一模一样的实例对象?哪些是相同的?哪些是不同的?建议你封装一个 CreateHttpWebRequest 方法来创建“一模一样”的HttpWebRequest实例。我猜测顶多也就是url相同,代理相同,网络凭据相同,而不会涉及到同一个RequestStream之类的I/O类。
序列化和反序列化是个很不错的选择啊。
想获取另外一个一模一样的实例对象,两者之间的修改不互相影响
@水墨.MR.H: 序列化就是满足你的要求的
1.自定义方法,手动写每一个对象的复制。
2.利用反射
3.序列化
4.流