【问题标题】:Pass-through methods vs. accessing nested objects directly传递方法与直接访问嵌套对象
【发布时间】:2014-10-09 13:37:49
【问题描述】:

我拥有的是一个对象,其中包含一个对象列表,每个对象都包含另一个具有属性等的对象列表。

目前我使用传递方法能够添加到那些嵌套对象,就像在这个极其简化的示例中一样:

Public Class clsA

Private objB As List(Of clsB) = New List(Of clsB)

Public Sub New()
    objB.Add(New clsB)
End Sub

Public Sub AddInt(ByVal BIndex As Int32, ByVal CIndex As Int32, ByVal Number As Int32)
    objB(BIndex).AddInt(CIndex, Number)
End Sub

End Class

Public Class clsB

Private objC As List(Of clsC) = New List(Of clsC)

Public Sub New()
    objC.Add(New clsC)
End Sub

Public Sub AddInt(ByVal CIndex As Int32, ByVal Number As Int32)
    objC(CIndex).AddInt(Number)
End Sub

End Class

Public Class clsC

Private lstNum As List(Of Int32) = New List(Of Int32)

Public Sub AddInt(ByVal Number As Int32)
    lstNum.Add(Number)
End Sub

End Class

似乎正确的编码标准会告诉我这是正确的:

Public Class clsD

Public objE As List(Of clsE) = New List(Of clsE)

Public Sub New()
    objE.Add(New clsE)
End Sub

End Class

Public Class clsE

Public objF As List(Of clsF) = New List(Of clsF)

Public Sub New()
    objF.Add(New clsF)
End Sub

End Class

Public Class clsF

Public lstNum As List(Of Int32) = New List(Of Int32)

End Class

在某些情况下这两种方法都可以接受吗?还是总是首选直通设置?

Public Class Form1

Dim oA As clsA = New clsA
Dim oD As clsD = New clsD

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    oA.AddInt(0, 0, 3)
    oD.objE(0).objF(0).lstNum.Add(3)

End Sub
End Class

【问题讨论】:

    标签: vb.net coding-style standards


    【解决方案1】:

    想想它是如何在整个 .NET Framework 中完成的。集合应分配给私有字段并通过公共只读属性公开。

    Public Class Thing
    
        Private _stuff As New List(Of Thing)
    
        Public ReadOnly Property Stuff() As List(Of Thing)
            Get
                Return _stuff
            End Get
        End Property
    
    End Class
    

    然后调用者可以直接访问该集合以调用其Add 方法等,但不能分配一个全新的集合。到处都有例子:Control.ControlsListBox.ItemsComboBox.ItemsListView.ItemsDataSet.TablesDataSet.RelationsDataTable.RowsDatatable.Columns等等等等。

    【讨论】:

    • 我知道我见过很多这样的例子,但从未与我的应用程序建立联系。感谢您的建议,这是一个很好的看待它的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多