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
相关产品推荐
相关产品推荐

