2011-03-03 53 views
1

你好,我將通過說Im先前是一個asp開發人員,並正在學習oop編程/ Vb.Net有沒有辦法從類中的方法調用和使用類的類型? Vb.Net

我工作的3層架構,並試圖儘可能多地抽象我的代碼,因爲我有一個非常大的內部網絡進行轉換。在我的業務層中,我正在用管理方法定義我的類。下面是我的一個課程的例子。

我的問題:有沒有一種方法讓我泛泛地引用類的類型和對象類型,這樣我就不必在整個類中持續引用類名/類型「ServiceRequest」。例如類似:

"Public Function GetItem(ByVal ID As Integer) As Me.GetType"? 

任何信息,如果這是可能的,我應該研究什麼話題,將不勝感激。如果我做了一些明顯錯誤的事情,請隨時對代碼進行評論。謝謝

Public Class ServiceRequest 
    Inherits DataUtility 

#Region "Properties" 
    Public Property ReqID As Integer 
    ' Public Property PrjID As Integer 
    Public Property EntBy As String 
    Public Property EntDate As DateTime 
    Public Property ServiceType As String 
    Public Property ResponseTime As String 
    Public Property ServiceReason As String 
    Public Property Comments As String 
#End Region 

#Region "Public Methods" 
    Public Function Save() As Integer 
     Return SaveRecord(GetParamsList(Me)) 
    End Function 

    Public Function Delete(ByVal ID As Integer) As Boolean 
     Return DeleteRecord(ID) 
    End Function 

    Public Function GetItem(ByVal ID As Integer) As ServiceRequest 
     Dim retVal As ServiceRequest = New ServiceRequest() 
     Dim sdr As SqlDataReader = GetRecord(ID) 
     While sdr.Read() 
      retVal = ParseDataToObj(sdr) 
     End While 
     Return retVal 
    End Function 

    Public Function GetList(ByVal ID As Integer) As List(Of ServiceRequest) 
     Dim retVal As List(Of ServiceRequest) = New List(Of ServiceRequest)() 
     Dim sdr As SqlDataReader = GetRecords(ID) 
     While sdr.Read() 
      Dim listObj As ServiceRequest = ParseDataToObj(sdr) 
      retVal.Add(listObj) 
     End While 
     Return retVal 
    End Function 
#End Region 

#Region "Helper Methods " 
    Private Function GetParamsList(ByVal paramVal As ServiceRequest) As List(Of SqlParameter) 
     'Sending Data to SQL Server - Stored Procedures 
     Dim retVal As List(Of SqlParameter) = New List(Of SqlParameter) 

     With paramVal 
      retVal.Add(New SqlParameter("@ReqID", .ReqID)) 
      'retVal.Add(New SqlParameter("@CusID", .CusID)) 
      retVal.Add(New SqlParameter("@EntBy", .EntBy)) 
      retVal.Add(New SqlParameter("@ServiceType", .ServiceType)) 
      retVal.Add(New SqlParameter("@ResponseTime", .ResponseTime)) 
      retVal.Add(New SqlParameter("@ServiceReason", .ServiceReason)) 
      retVal.Add(New SqlParameter("@Comments", .Comments)) 
     End With 
     Return retVal 
    End Function 

    Private Function ParseDataToObj(ByVal dr As SqlDataReader) As ServiceRequest 
     ' Reading data and converts to object 
     ' Single vs list - if boolean then get case types list 

     Dim returnObjData As New ServiceRequest() 
     With returnObjData 
      .ReqID = MyBase.GetDataValue(Of Integer)(dr, "ReqID") 
      '.CusID = MyBase.GetDataValue(Of Integer)(dr, "CusID") 
      .EntBy = MyBase.GetDataValue(Of String)(dr, "EntBy") 
      .EntDate = MyBase.GetDataValue(Of DateTime)(dr, "EntDate") 
      .ServiceType = MyBase.GetDataValue(Of String)(dr, "ServiceType") 
      .ResponseTime = MyBase.GetDataValue(Of String)(dr, "ResponseTime") 
      .ServiceReason = MyBase.GetDataValue(Of String)(dr, "ServiceReason") 
      .Comments = MyBase.GetDataValue(Of String)(dr, "Comments") 
     End With 
     Return returnObjData 
    End Function 
#End Region 

End Class 
+0

不,至少它不是我所知道的。但是如果有辦法,你應該避免它,因爲可讀性的原因。 – 2011-03-03 22:37:00

回答

2

如果我理解正確,您可能可以使用泛型。

Public Class classHolder(Of T) 
    Private someValue As T 

    Public Function GetItem(ByVal ID As Integer) As T 
     Return someValue 
    End Function 
End Class 

T是你想要的任何類型。

相關問題