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.