2009-08-18 6 views
0

I ont deux classes:cours similaires avec des signatures différentes


    Public Class Subscribing 

    Private _subscribingObjects As IList(Of String) 

    Public Sub Add(ByVal obj As SubscribeObject) 
     '...code...' 
    End Sub 

    Public Sub Remove(ByVal index As Integer) 
     '...code...' 
    End Sub 

    End Class 

    Public Class Providing 

    Private _providingObjects As IList(Of String) 

    Public Sub Add(ByVal obj As ProvideObject) 
     '...code...' 
    End Sub 

    Public Sub Remove(ByVal index As Integer) 
     '...code...' 
    End Sub 

    End Class 

Est-il possible d'ajouter plus élégant faire? Une classe suffirait, mais puisque les méthodes Add ont des arguments différents, alors cela ne marcherait pas vraiment.

Toute aide serait appréciée.

+0

À quoi ressemblent les classes ProvideObject et SubscribeObject? Postez les définitions de ces classes et nous pourrons peut-être vous aider. –

+0

Ils sont définis dans une DLL, donc je n'ai aucun contrôle sur eux. –

Répondre

4

cela?

Public Class SubscribingProviding(Of t) 

Private _subscribingObjects As IList(Of String) 

Public Sub Add(ByVal obj As t) 
    '...code...' 
End Sub 

Public Sub Remove(ByVal index As Integer) 
    '...code...' 
End Sub 

End Class 
+0

Si je ne me trompe pas, je pense que cela ne fonctionnera qu'avec .net 3.5. J'utilise 2.0. –

+0

semblent fonctionner sous 2.0 – Fredou

+0

génériques travaillent dans 2.0 –

0

Eh .. probablement pas. Ils sont assez différents que vous ne pouvez même pas les interfacer.

1

Vos fonctions d'ajout devraient fonctionner correctement. Tant que vous avez transmis différents types de variables, vous pouvez avoir les mêmes noms de fonction. Vos sous-supprimés ne seront pas autorisés dans la même classe car ils utilisent le même paramètre Integer.

0

Personnellement, je ne mélangerais pas les deux responsabilités (de souscrire et de fournir) dans une classe. Les classes elles-mêmes peuvent facilement être simplifiées en tout héritant de la liste (de T)

Public Class Subscribing 
    Inherits List(Of SubscribeObject) 
End Class 

Public Class Providing 
    Inherits List(Of ProvideObject) 
End Class 

Si vous voulez vraiment descendre à une classe et assurez-vous qu'il ne peut accepter SubscribeObject et ProvideObject respectivement, implémenter une interface commune dans les deux SubscribeObject et ProvideObject. Créez ensuite une classe générique acceptant l'interface:

' Common interface ' 
Public Interface ISubscribeProvideObject 
End Interface 

' SubscribeObject and ProvideObject both implementing the common interface ' 
Public Class SubscribeObject 
    Implements ISubscribeProvideObject 
    '...' 
End Class 

Public Class ProvideObject 
    Implements ISubscribeProvideObject 
    '...' 
End Class 

' Generic class accepting both types ' 
Public Class SubscribingProviding(Of T As ISubscribeProvideObject) 
    Inherits List(Of T) 
    '... Add() and Remove() methods only needed if custom logic applies ...' 
End Class 
+0

L'utilisation d'une interface est ce que je visais avec mon commentaire ci-dessus sur le code de SubscribeObject et ProvideObject .... –

Questions connexes