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

VB.NET中能否在构造函数内替换当前实例为已有同类型实例?

VB.NET中替换构造函数内实例的可行性分析

结论:你的需求无法直接实现

原因如下:

  • VB.NET构造函数(Sub New)中的Me是当前实例的只读引用,无法通过赋值Me = OtherThing来替换整个实例。构造函数的核心作用是初始化CLR已经分配好内存的当前实例,而非改变实例本身的引用指向。
  • 当执行Dim thng As Something = New Something()时,CLR会先为Something实例分配内存,再调用构造函数。构造函数内的操作无法修改外部变量thng最终指向的实例,它始终会绑定到最初分配的那个对象。

可行的替代方案

虽然你不想使用工厂模式或初始化后赋值,但这些是.NET对象模型下控制实例创建的常规方案:

  • 工厂模式:定义类的Shared方法来返回目标实例,示例代码如下:
Class Something
    Private Shared ReadOnly OtherThing As New Something()

    Private Sub New()
        ' 私有构造函数,禁止外部直接New
    End Sub

    Public Shared Function CreateSomething() As Something
        Return OtherThing
    End Function
End Class

外部调用时使用Dim thng As Something = Something.CreateSomething(),直接获取预设的OtherThing实例,完全满足你控制实例创建的需求。

  • 状态复制(不推荐):如果坚持要使用New关键字,可以在构造函数中将OtherThing的所有成员值复制到当前实例。但这种方式是复制状态而非替换实例,若类包含复杂引用类型成员,还需要处理深拷贝问题,代码复杂度远高于工厂模式。

内容的提问来源于stack exchange,提问作者Piotr Kalinowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:27:09