2013-08-24 2 views
2

Я новичок в дженериков и коллекций в VB.Net. Я написал свой первый класс, который создает список пользовательских объектов. Хотя кажется, что это работает, я считаю, что я сделал это в грубой форме, и я хотел бы знать, как улучшить его для кода, который должен будет вызвать его. Здесь существенная часть класса списка:Как сделать VB.Net класс список более гибким для вызывающего

Public Class Subscribers 
    Public List As New List(Of Subscriber) 
    Public Sub New() 
     Dim sConnDatabase As String = ConfigurationManager.ConnectionStrings("DatabaseConnString").ConnectionString 
     Dim connection As New SqlConnection(sConnDatabase) 
     Dim cmd As SqlCommand 
     cmd = New SqlCommand("SELECT * FROM dbo.Subscriber_v", connection) 
     cmd.CommandType = CommandType.Text 
     connection.Open() 
     Dim objReader As SqlDataReader = cmd.ExecuteReader() 
      Do While objReader.Read() 
      Dim id As Integer = objReader("SubscriberID") 
      Dim s As Subscriber = New Subscriber(id) 
      List.Add(s) 
     Loop 
     objReader.Close() 
     connection.Close() 
    End Sub 
End Class 

Вот мой первый маленький тест для использования класса:

Dim n As String 
Dim d As Integer 

Dim allSubs As New Subscribers() 
For Each Subscriber In allSubs.List 
    n = Subscriber.SubscriberName 
    d = Subscriber.DaysUntilExpired.ToString() 
Next 

Конкретный вопрос, касающийся улучшения будет: как включить вызывающий в код что-то вроде:

For Each x In allSubs 
n = x.SubscriberName 
d = x.DaysUntilExpired.ToString() 
Next 

будет ли какой-нибудь способ кодирования класса, так что allSubs может быть выражен без необходимости указать .list - и какой-то образом выразить это такое, что х будет признан типом Subscriber.

ответ

3

Чтобы сделать эту работу необходимо иметь Subscribers реализации IEnumerable(Of Subscribers). Реализация может просто перейти на поле List

Public Class Subscribers Implements IEnumerable(Of Subscriber) 
    Public Function GetEnumerator() As IEnumerator(Of Subscriber) _ 
    Implements IEnumerable(Of Subscriber).GetEnumerator 

    Return List.GetEnumerator() 
    End Function 

    Private Function GetEnumerator1() As IEnumerable _ 
    Implements IEnumerable.GetEnumerator 

    Return List.GetEnumerator() 
    End Function 
End Class 
Смежные вопросы