2012-08-07 67 views
0

試圖讓我的頭繞着通用接口和類。在新方法中使用我的類並調用使用此類型的data.method時,如何獲得T?通用接口vb

Public MustInherit Class RepositoryBase(Of T) 
    Implements IRepository(Of T) 

    Private Data As IDAL 

    Public Sub New() 
     Data = DTOParserFactory.GetParser(T.GetType().ToString()) 
    End Sub 

    Public Sub delete(BaseDTO As T) Implements Domain.Business.IRepository(Of T).delete 
     'Data.delete(Convert.ChangeType(BaseDTO, TypeOf(Type)) 
    End Sub 

    Public Function getAll() As System.Linq.IQueryable(Of T) Implements Domain.Business.IRepository(Of T).getAll 
     'Return Data.getAll()() 
    End Function 
End Class 
+0

那麼,「get T」是什麼意思? – 2012-08-07 10:59:29

回答

1

我假設你需要得到T的Type對象?

在你的構造

Public Sub New() 
    Data = DTOParserFactory.GetParser(GetType(T).ToString()) 
End Sub 
+0

適用於構造函數,謝謝。我如何調用函數 Data.delete(BaseDTO) based並不繼承或實現約束類型。我是否需要將T轉換爲實現此目標的對象? – user900566 2012-08-07 11:13:23

+0

總之:是的。然而,在約束類型上使用這些方法會很好,否則爲什麼要使用約束類型呢?我認爲'Delete'&'GetAll'方法是在約束類型上的。這就是爲什麼你會用這種類型約束這個泛型類。 – 2012-08-07 11:39:39

0

我不是超清晰的問題,但也許這是你在找什麼。

假設你有一個共同的基類BaseDTO那麼你會像這樣定義你的RepositoryBase類:

Public MustInherit Class RepositoryBase(Of T As BaseDTO) 

然後你聲明類的像這樣的instace:

Dim userRepository As New RepositoryBase(Of User)() 

該做些什麼將T約束爲BaseDTO的一個子類,並允許您訪問所有BaseDTO的方法。