You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 04:48:16