Jag har en select case sats, och vid de olika alternativen ska det jobbas mot olika klasser. Jag har bara lyckats lösa detta på ett klumpigt vis: Det kanske hjälper att implementera et gemensamt gränssnitt(Interface).Dynamisk dimning av klass
<code>select case Variabel
case "laddaclass1"
Dim vclass1 as class1
set vclass1 = new class1
vclass1.minmetod 'osv
...
case "laddaclass2"
Dim vclass2 as class2
set vclass2 = new class2
vclass1.minmetod 'osv
...
end select
</code>
Detta är ju inte särskilt vacker eller hur?
Jag skulle lösa det på detta viset(om det nu går):
<code>
Dim vClass as Class
select case variabel
case "laddaclass1"
set vclass = new class1
vclass.mymethod 'osv
case "laddaclass2"
set vclass = new class2
vclass.mymethod 'osv
end select
</code>
Det ger nog ingen skillnad prestanda mässigt men det anra sättet vore så mycket snyggare och mindre att skriva..
/CythSv: Dynamisk dimning av klass
Här kommer litet exempel...
'Class: ICommonInterface
Option Explicit
Public Sub MinMetod(Parameter1 As Long, Parameter2 As Long)
End Sub
'Class: Class1
Option Explicit
Implements ICommonInterface
Private Sub ICommonInterface_MinMetod(Parameter1 As Long, Parameter2 As Long)
MinMetod Parameter1, Parameter2
End Sub
Public Sub MinMetod(Parameter1 As Long, Parameter2 As Long)
Parameter2 = Parameter1
End Sub
'Class: Class2
Option Explicit
Implements ICommonInterface
Private Sub ICommonInterface_MinMetod(Parameter1 As Long, Parameter2 As Long)
MinMetod Parameter1, Parameter2
End Sub
Public Sub MinMetod(Parameter1 As Long, Parameter2 As Long)
Parameter1 = Parameter2
End Sub
'Exempel på en funktion för att skapa klasser
Public Function NewClass(ClassName As String) As ICommonInterface
Select Case ClassName
Case "Class1"
Set NewClass = New Class1
Case "Class2"
Set NewClass = New Class2
End Select
End Function
'Exempel på en funktion som använder det gemensamma gränssnittet
Public Sub Test1(ClassName As String, Parameter1 As Long, Parameter2 As Long)
Dim vClass As ICommonInterface
Set vClass = NewClass(ClassName)
vClass.MinMetod Parameter1, Parameter2
End Sub
'Exempel på en funktion som identifierar vilken klass det är i variabeln
Public Function GetName(vClass As ICommonInterface) As String
If TypeOf vClass Is Class1 Then
GetName = "Class1"
ElseIf TypeOf vClass Is Class2 Then
GetName = "Class1"
End If
End Function