如何在自定义Record类内部删除记录后将自身置为Null/Nothing?
问题:能否在对象内部将自身销毁或置为Null/Nothing?
我定义了一个myRecord类,该类可以在SQL表中创建一条记录,还能对记录执行修改操作。现在想给这个类添加一个delete子程序,用来删除对应SQL记录后,把当前myRecord对象置为Null/Nothing。示例代码如下:
class myRecord int recordId sub new(con as sqlconnection,col1,col2,col3) sqlcommand ("insert into....") recordId=..... end sub sub modify(colname,newvalue) sqlcommand("update.... where...") end sub sub delete() sqlcommand(delete from....where recordId....) ' 这里我想把对象变成null或nothing end sub end class dim record as myrecord(con,"val1","val2","val3") myrecord.delete()
请问是否可以在对象内部将自身销毁或置为Null/Nothing?
不行,你没法在对象内部把自身的引用置为Null/Nothing。原因很简单:对象内部的Me(VB里的自身引用)只是当前对象的一个指针副本,修改这个副本不会影响外部持有该对象的变量(比如示例里的record变量)。
如果想要达到类似效果,有几个替代方案:
- 外部手动置空:调用
delete方法后,在外部直接把变量设为Nothing,比如:record.delete() record = Nothing - 标记失效状态:在类里添加一个
IsDeleted布尔属性,delete方法执行后将该属性设为True,后续其他方法(比如modify)先检查这个属性,若已删除则抛出异常或直接返回,避免无效操作。示例:class myRecord int recordId bool IsDeleted = False sub new(con as sqlconnection,col1,col2,col3) sqlcommand ("insert into....") recordId=..... end sub sub modify(colname,newvalue) if IsDeleted then throw new Exception("记录已删除,无法修改") end if sqlcommand("update.... where...") end sub sub delete() if not IsDeleted then sqlcommand(delete from....where recordId....) IsDeleted = True end if end sub end class - 借助外部逻辑处理:把删除逻辑放到工厂类或静态方法中,执行删除操作后直接置空外部变量,本质还是外部操作的变种。
总之,对象无法主动让外部的引用失效,只能通过外部配合或内部状态标记来实现类似需求。
内容的提问来源于stack exchange,提问作者barak.o
相关产品推荐
相关产品推荐

