接口的行为不像对象?

时间:2012-10-08 14:41:37

标签: vb.net object

我的界面有点问题。我的一堆类实现了ILayoutObject接口。方法将变量声明为ILayoutObject(将其默认为Nothing),然后运行一些代码来决定它应该是哪个对象。问题是,评估代码在一个方法中运行,该方法接收变量作为参数并为其分配对象。对于对象,这没有问题。对象会受到方法更改的影响,一切都会好的。但是,当使用接口时,调用代码中的变量仍为Nothing,其行为类似于普通变量。有没有人对如何绕过这个有任何想法?唉,由于代码结构,我无法使用ByRef或函数:(

以下是一些代码:

Protected LayoutHandler As Dictionary(Of String, Action(Of Constants.OptionsEntryStructure, ILayoutElements)) = New Dictionary(Of String, Action(Of Constants.OptionsEntryStructure, ILayoutElements)) From
    {
    {Constants.KeyLayoutType, AddressOf KeyLayoutType}
    }

Sub MakeLayOuts
    Dim LayoutElement As ILayoutElements = Nothing 
    Dim Value = "SomeValues"
    Dim key = "Key"
    LayoutHandler(key)(Value, LayoutElement)
    ' LayoutElement remains nothing.....
End Sub

Protected Sub KeyLayoutType(elem As Constants.OptionsEntryStructure, Layout As ILayoutElements)
    Layout = New LayoutObject 'which would implement the interface
End Sub

1 个答案:

答案 0 :(得分:1)

如果要更改调用代码中的变量指向的对象,则需要将参数声明为ByRef

Protected Sub KeyLayoutType(elem As Constants.OptionsEntryStructure, ByRef Layout As ILayoutElements)
    Layout = New LayoutObject 'which would implement the interface
End Sub

任何引用类型(类)都是如此。它们被接口引用的事实没有区别。

如果你不能使用ByRef,并且你不能使用函数来返回新对象,那么你唯一的另一个真实选择就是请求一种具有布局对象的对象。属性。例如:

Public Interface ILayoutElementContainer
    Public Property LayoutElement As ILayoutElements
End Interface

Protected Sub KeyLayoutType(elem As Constants.OptionsEntryStructure, Container As ILayoutElementContainer)
    Container.LayoutElement = New LayoutObject 'which would implement the interface
End Sub