2012-08-07 45 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的方法。