Quando dovrebbe o non dovrebbe essere dichiarata una variabile come tipo di interfaccia personalizzata?
Quando ho attraversato un po 'di codice, avevo bisogno di sapere cosa stava succedendo qui:
Public Class MyMainProject
....
Public Sub DoMyWork()
Dim objIMyInterface As IMyInterface
....
objIMyInterface = GetReturnObject()
End Sub
....
End Class
In base a ciò che ho visto, objIMyInterface viene utilizzato solo per una cosa. Non sapevo quante classi implement , ma non ci sono casting di tipi simili in questo codice. objIMyInterface è usato proprio come un tipo normale, non anonimo in meno. In secondo luogo, la mia ricerca ha aiutato un po '...
GetReturnObject succede per restituire un'istanza di IMyInterface . L'oggetto di ritorno di GetReturnObject , ovviamente, ha una chiamata a un altro metodo.
Public Function GetReturnObject() As IMyInterface
Dim retObject As IMyInterface
...
retObject = AnotherMethod()
...
Return retObject
End Function
Quindi provo ad entrare in AnotherMethod , ma è in un progetto senza simboli. Quindi dopo alcune ricerche, trovo la fonte e la analizzo. Dopo aver ripetuto questo processo alcune volte, alla fine ottengo qualcosa di simile:
Public Function FinalMethod() As IMyInterface
Dim FinalObject As MyClassType
...
FinalObject = GetMyClassType()
...
Return FinalObject
End Function
Yay! GetMyClassType restituisce MyClassType ! Vado in quella classe e ovviamente:
Public Class MyClassType
Implements IMyInterface
...
End Class
Quello che finisco per scoprire è che IMyInterface è usato da nient'altro che questa classe. No biggie, è tutto un buon codice dal suo aspetto. Ma poi torno al mio progetto originale, me ne accorgo:
Public Class MyMainProject
....
Public Sub DoMyWork()
Dim objIMyInterface As IMyInterface
....
objIMyInterface = GetReturnObject()
End Sub
....
Public Sub OtherWork()
Dim objMyType As MyClassType
....
End Sub
....
End Class
Il tizio che l'ha creato è da tempo scomparso, ma mi piacerebbe sapere quali sono i tuoi pensieri su quale metodo utilizzare. Devo dichiarare entrambi come IMyInterface ? O entrambi come MyClassType ? Il codice funziona bene in ogni caso.