Hoe een Interface maken van een List( of T)

Status
Niet open voor verdere reacties.

xanderke

Gebruiker
Lid geworden
23 feb 2013
Berichten
53
Graag zou ik waar de vraagtekens staan een List(of T) gebruiken...
echter lukt me dit niet... het is de bedoeling dat de objecten van de itemslijst kunnen verschillen...

Code:
Public Interface IBusinessLayer

    ReadOnly Property Itemslijst() As List(Of ???)
    Sub OpvullenLijst()
    Function GeefLijst() As List(Of ???)
    Sub Constructor()


End Interface

Alvast bedankt!
 
Dan moet je de interface zelf aanpassen.. zo iets als IBusinessLayer(Of T)
 
Ik dacht dat de bedoeling van een interface was om een soort standaard te maken.... ik wil de interface implementeren met bv de klasse Chauffeurs, of met Personen, of met nog andere dingen... vandaar dat ik denk dat ik een een list of T moet gebruiken.... of is dat niet zo?
 
Dan moet de deze ook van een zelfde interface voorzien (of een base class). Dan kun je List (Of BaseClass) doen


Zo iets als dit:

Code:
Public Interface IAuto
	Property Occupants() As List(Of IOccupant)
End Interface

Public Interface IOccupant
	ReadOnly Property Name() As String
End Interface

Public Class Driver
	Implements IOccupant
	Public Property Name() As String
		Get
			Return m_Name
		End Get
		Private Set
			m_Name = Value
		End Set
	End Property
	Private m_Name As String
End Class

Public Class Passenger
	Implements IOccupant
	Public Property Name() As String
		Get
			Return m_Name
		End Get
		Private Set
			m_Name = Value
		End Set
	End Property
	Private m_Name As String
End Class

'=======================================================
'Service provided by Telerik (www.telerik.com)
'=======================================================
 
Laatst bewerkt:
inderdaad zoiets, maar met diene verstande dat occupants een lijst kan zijn van gelijk welk zelfde type kan zijn...
 
Wat bedoel je precies? Ik begrijp je laatste post niet helemaal...

Je kunt in dit voorbeeld zowel een driver instance als een passenger instance aan de lijst toevoegen. (alles wat de IOccupant interface heeft)
 
ik heb volgende klasses... gemeentes, landen, chauffeurs, klanten, ... enz enz het is dus de bedoeling om een interface te maken om voor telkens van bepaalde methodes op te vragen... de Lijstclasses staan volledig appart en kunnen lijsten doorgeven en bepaalde bewerkingen mee doen... In die lijsten zit er een lijst van objecten: gemeentes OF landen OF chauffeurs OF klanten OF ... Daarvoor zou ik een interface nodig hebben die een lijst of T bevat... Of moet ik dit ander oplossen... Het Wereld Wijde Web geeft voor zover ik al gevonden heb geen oplossing... dus waarschijnlijk is mijn visie verkeerd...
 
Ik weet niet precies wat je wilt doen, wil je op de customer class een method om een lijst met (alle) customers terug te geven?

Wil je een IBusinessLayer om meerdere layers te maken? Of wil je een class die bepaalde dingen doet op al je business models? (bijvoorbeeld in een method als parameter een customer of driver meegeven zodat deze opgeslagen kan worden?)





(ik doe alles in C# dus gebruik een converter om het naar VB te zetten, hoop dat het allemaal klopt, en zelf de gewoonte om alles in engels te doen :P)

Code:
Public Interface IBusinessLayer
	Function GetItems(Of T)() As List(Of IBusinessModel)
End Interface

Public Class BusinessLayer
	Implements IBusinessLayer
	Public Function GetItems(Of T)() As List(Of IBusinessModel)
		Dim type As Type = GetType(T)

		If type = GetType(Customer) Then
			Return New List(Of IBusinessModel)(New List(Of Customer)())
		End If

		If type = GetType(Driver) Then
			Return New List(Of IBusinessModel)(New List(Of Driver)())
		End If

		Throw New Exception("type not found")
	End Function
End Class

zo kun je bij de method call T invullen en om de gekregen lijst de gebruiken moet je even het model casten naar wat je hebt gebruikt op de plaats van T.



//voorbeeld van een business model
Code:
Public Interface IBusinessModel
	Sub Save()
End Interface

Public Class Customer
	Implements IBusinessModel
	Public Sub Save()
		'save customer
	End Sub
End Class

Public Class Driver
	Implements IBusinessModel
	Public Sub Save()
		'save driver
	End Sub
End Class

'=======================================================
'Service provided by Telerik (www.telerik.com)
'Conversion powered by NRefactory.
'Twitter: @telerik, @toddanglin
'Facebook: facebook.com/telerik
'=======================================================
 
Alvast bedankt voor uw reactie, echter heb ik dit uitgetest en heb ik dit niet werkend gekregen...

ik zal hieronder eens een stuk van mijn code tonen..


klasse land
Code:
Public Class Land

    Private _IDland As Integer
    Public Property IDland() As Integer
        Get
            Return _IDland
        End Get
        Set(ByVal value As Integer)
            _IDland = value
        End Set
    End Property


    Private _Land As String
    Public Property Land() As String
        Get
            Return _Land
        End Get
        Set(ByVal value As String)
            _Land = value
        End Set
    End Property


    Private _LandCode As String
    Public Property LandCode() As String
        Get
            Return _LandCode
        End Get
        Set(ByVal value As String)
            _LandCode = value
        End Set
    End Property


    Public Sub New()
        Me.New(Nothing)
    End Sub

    Public Sub New(pIDland)
        Me.New(pIDland, Nothing)
    End Sub
    Public Sub New(pIDland, pLand)
        Me.New(pIDland, pLand, Nothing)
    End Sub

    Public Sub New(pIDland, pLand, pLandCode)
        IDland = pIDland
        Land = pLand
        LandCode = pLandCode
    End Sub
End Class

klasse landenlijst

Code:
Public Class LandenLijst
   
    Private _itemsLandenlijst As List(Of Land)
    Public ReadOnly Property ItemsLandenlijst() As List(Of Land)
        Get
            Return _itemsLandenlijst
        End Get
    End Property
        Public Sub New()
        _itemsLandenlijst = New List(Of Land)
        End Sub

        Public Sub OpvullenLijst()
            Dim mijnRepository As New Repository
        mijnRepository.CreatieLandenLijst()
        _itemsLandenlijst = mijnRepository.GeefLandenLijst

        End Sub
    Public Function GeefLandenLijst() As List(Of Land)
        Return _itemsLandenlijst

    End Function

    Public Sub LandToevoegenAanLijst(ByVal pItem As Land)
        _itemsLandenlijst.Add(pItem)
    End Sub

    End Class

deze laatste klasse zou geimplementeerd moeten worden door de interface, aangezien er voor chauffeurs, klanten enz een gelijkaardige klasse wordt gebruikt....

code van de interface die niet klopt :)
Code:
Public Interface IBusinessLayer

    Function GeefLijst(Of T)() As List(Of IBusinessLayer)
    ReadOnly Property Itemslijst() As List(Of IBusinessLayer)
    Sub OpvullenLijst()

    Sub Constructor()


End Interface


het probleem zit hem in de geef lijsten en de read only property itemslandenlijst...

hopelijk is het nu een stuk duidelijker
 
Ah, gewoon repositories.
Je landenlijst is in principe gewoon een repository met een algemene repository binnen in.

Ik probeer even wat code op te snorren, ik heb dit ergens staan met 1 standaard interface voor de basis en dan aanvullend met een generic interface zoals in m'n eerste post.

Zal wel allemaal C# zijn maar kun je omzetten met: http://converter.telerik.com/ zoals ik dat in eerdere posts heb gedaan.
 
Laatst bewerkt:
Opgelost

interface gemaakt als volgt

Code:
Public Interface IBusinessLayer


    Sub OpvullenLijst()
    Function GeefLijst() As System.Collections.IList
End Interface
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan