[VB.NET]克隆对象

若有如下代码: 

Dim a As New obj1    'obj1为一个自己写的类
Dim b As New obj1
a.ss = 1     '为类内变量ss赋值
a.cc = 1     '为类内变量cc赋值

b = a

b.ss = 100
b.cc = 666

Debug.Writeline("a.ss = " & a.ss)
Debug.Writeline("a.ss = " & a.cc)

此时输出为:

a.ss = 100
a.cc = 666

发现对b的更改同样作用于a,因为b指向a的内存地址。

如果需要在保持a不变的情况下使用由a赋值的b,需要将a克隆,再将克隆的对象赋值给b。

而克隆的思路是先用BinFormatter的Serialize方法,把对象存储在MemoryStream流中,再用将其Deserialize反序列化,得到流,最后将其转化为原对象的类型。

操作代码如下:

1.为类声明可序列化,添加Clone()函数:

'对obj1的声明前需加上"<Serializable()>",使其可序列化
<Serializable()> Public Class obj1
    
    Public ss As Integer
    Public cc As Integer
    
    '为类添加Clone函数
    Public Function Clone() As obj1
        Dim BFormatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
        Dim MStream As New IO.MemoryStream()
        BFormatter.Serialize(MStream, Me)
        MStream.Position = 0
        Return CType(BFormatter.Deserialize(MS), obj1)
    End Function

End Class

2.在使用过程中调用Clone()函数。

Dim a As New obj1
a.ss = 1
a.cc = 1

Dim b As New obj1 = aa.Clone()

b.ss = 100
b.cc = 666

现在b不再指向a的内存地址,可以放心地操作对象b了。

参考:VB.NET中怎么实现对象克隆 - 编程语言 - 亿速云

参考:VB.NET中对象的克隆 (转载+亲自实践)_bigheadsheep的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值