2012-06-13 24 views
0

說我有一個類中有幾個方法。我想將這些方法組織到可以訪問的分組中,而不必每次都創建一個新對象。目的是組類的方法爲邏輯桶組織VB.Net Mehods

例如:

Dim myclass as MyCustomClass 
myclass.Shipping.Get_List() 
myclass.Production.Get_List() 

什麼是做到這一點的最好方法是什麼?我嘗試嵌套類,但VB.NET不會讓我訪問如上所示的方法。

+0

您可以用嵌套類這樣做,如果父類有一個(可能是'Shared')該類作爲一個實例公衆成員。儘管如此,說實話,這聽起來並不是一個好主意。這非常非常規且不直觀,這使得代碼更難以支持。如果你試圖找到一種方法來直觀地將你的類中的方法分組,那麼這聽起來像這個類需要重新分解成多個類。 – David

+0

我在寫你的評論時,實際上已經澄清了這個例子。目的是影響子類別的方法有不同的組合。例如「航運」對這一類別有很多方法。我原本打算將它們分成不同的類別,但有重疊和一些他們都依賴的共同變量。將它作爲一個結構看起來更直觀,因爲它們都與相同的基礎數據相連接。 – ElPresidente

+0

「重疊和一些常見變量」聽起來像是多個多態類的情況,而不是一個試圖迎合所有事情的大類。此外,類的結構不一定必須與底層數據的結構相匹配。情況往往如此,但兩者不應緊密相連。面向對象類與關係數據的本質有着相同概念表示方式的不同。對代碼一無所知,我只能推薦閱讀設計模式和麪向對象的設計。 – David

回答

0

所以這是我怎麼會做你想做

什麼這是不是世界上最好的設計,但它的工作

我建議你移動的實際get_list和其他類的方法/財產到特定類,同時保持一個共同的父類,在這種情況下是測試

但後來,我不知道你的代碼看起來像這樣從這一點上來說,它是你的選擇

Module Module1 

    Sub Main() 
     Dim test As New test 
     test.Production.Get_List() 
     test.Shipping.Get_List() 
    End Sub 

End Module 


Public Class Shipping 
    Private parent As test 

    Public Sub New(ByRef parent As test) 
     Me.parent = parent 
    End Sub 

    Public Function Get_List() As List(Of Integer) 
     Return parent.GetShipping_List 
    End Function 
End Class 

Public Class Production 
    Private parent As test 

    Public Sub New(ByRef parent As test) 
     Me.parent = parent 
    End Sub 

    Public Function Get_List() As List(Of Integer) 
     Return parent.GetProduction_List 
    End Function 
End Class 

Public Class test 
    Public Property Production As Production 
    Public Property Shipping As Shipping 


    Public Function GetShipping_List() As List(Of Integer) 
     Return Nothing 
    End Function 

    Public Function GetProduction_List() As List(Of Integer) 
     Return Nothing 
    End Function 

    Public Sub New() 
     Production = New Production(Me) 
     Shipping = New Shipping(Me) 
    End Sub 
End Class 
+0

謝謝。我認爲這是我正在尋找的方法。這種方法的原因是我需要一個接口點,其他人將與之交互。他們無法看到底層結構,所有「航運」,「生產」等小節都必須共存。由於這些原因,讓我的用戶實例有幾個不同的類別是沒有意義的。您的方法很有意義,因爲它在後臺執行此操作,並且仍然爲最終用戶提供單個界面的外觀。 – ElPresidente

0

小心注意,你更可能應該重新評估你的架構,你可以實現你的模式是這樣的:

Public Class MyCustomClass 
    Private _shippingList As List(Of String) 
    Private _productionList As List(Of String) 

    Public Production As ProductionClass 
    Public Shipping As ShippingClass 

    Public Sub New() 
     Production = New ProductionClass(Me) 
     Shipping = New ShippingClass(Me) 
    End Sub 

    Public Class ShippingClass 
     Private _owner As MyCustomClass 

     Public Sub New(owner As MyCustomClass) 
      _owner = owner 
     End Sub 

     Public Function Get_List() 
      Return _owner._productionList 
     End Function 
    End Class 

    Public Class ProductionClass 
     Private _owner As MyCustomClass 

     Public Sub New(owner As MyCustomClass) 
      _owner = owner 
     End Sub 

     Public Function Get_List() 
      Return _owner._productionList 
     End Function 
    End Class 

End Class 

但是,如果你的真實意圖是簡單地組織以更方便和符合邏輯的方式方法,我會建議考慮:

Public Class MyCustomClass 
    Public Sub ShippingListGet() 
    End Sub 

    Public Sub ShippingListAddTo() 
    End Sub 

    Public Sub ShippingThatDO() 
    End Sub 

    Public Sub ShippingThisDo() 
    End Sub 

    Public Sub ProductionListGet() 
    End Sub 

    Public Sub ProductionListAddTo() 
    End Sub 

    Public Sub ProductionThisDo() 
    End Sub 

    Public Sub ProductionThatDo() 
    End Sub 
End Class 

請記住,有些人認爲難以閱讀。我個人比較喜歡組織,所以當這些方法按照字母順序排序時,他們在邏輯上進行分組。

0

我發現我一直在尋找解決方案的使用接口

Public Interface ICompany 
    Function Company_List() As DataTable 
End Interface 

Public Class MainClass 
    Public Company As ICompany = New CompanyClass 

    Public Sub New() 
     MyBase.New() 
    End Sub 

    Private Class CompanyClass 
     Public Sub New() 
      MyBase.New() 
     End Sub 

     Public Function Company_List() As DataTable 
       My code.... 
     End Function 
End Class 
End Class