【发布时间】:2019-07-30 23:05:36
【问题描述】:
我有一个对象Foo,但我并不拥有它(第三方程序集),我想通过接口IFoo。
在通过接口传递所有内容之前,我有一个Function TryGet(Name As String) as Foo。当找不到名称时,此函数将返回 Nothing。
现在将所有内容重构为接口,我有Function TryGet(Name As String) as IFoo。
IFoo的实现是:
Public Class SuperFoo
Implements IFoo
Private ThisFoo As Foo
Private Sub New()
End Sub
Public Sub New(MyFoo As Foo)
Me.ThisFoo = MyFoo
End Sub
Public Property Value As String Implements IFoo.Value
Get
Return Me.ThisFoo.Value
End Get
Set(value As String)
Me.ThisFoo.Value = value
End Set
End Property
End Class
Class AnotherClass
Function TryGet(Name as String) as IFoo
Dim MyFoo as Foo = InitialTryGetFunction(Name)
Return New SuperFoo(MyFoo)
End Function
End Class
为了保持我的原始代码逻辑,我希望能够在InitialTryGetFunction 返回空引用时将对SuperFoo 对象的引用设为空。
显然我可以在If Return New SuperFoo(MyFoo) 语句中添加一些代码,但我想知道这是否可以通过SuperFoo 构造函数完成?
另外,我是否正确地切换到接口(主要用于单元测试)?
【问题讨论】:
-
“我希望能够将 SuperFoo 对象设为 null”。只是为了记录,这没有任何意义。您不能使对象为空。根据定义,Null 不是对象。引用在没有引用对象时为 null,因此您希望返回不引用任何对象的
SuperFoo引用。 -
当 InitialTryGetFunction 返回空引用时,我希望能够将对 SuperFooobject 的引用设为空。