Der erste Teil der Frage wurde in anderen Posts behandelt, aber ich sah kein Beispiel. Ich verwende das häufig, wenn ich generische Interfaces und ihre nicht-generischen Gegenstücke implementiere. Wenn ich beispielsweise eine generische ObservableList erstellen möchte, möchte ich beide IList-Schnittstellen implementieren.
Public Class ObservableList(Of T)
Implements INotifyCollectionChanged,
IList,
IList(Of T)
End Class
Wenn beide ILists umgesetzt werden wir am Ende mit einer Menge von doppelten Funktionen auf. Einige haben die gleiche Signatur und können beide IList-Funktionen wie Clear implementieren. Einige der nicht-generischen Funktionen behandeln jedoch Objekte anstelle von generischen. Also würde ich für die Add-Funktion beide Implementierungen arbeiten lassen, aber die nicht-generische Version als privat festlegen, um die Verwendung der Klasse zu vereinfachen.
Public Sub Add(item As T) Implements System.Collections.Generic.ICollection(Of T).Add
'Add item to collection
End Sub
Private Function Add1(item As Object) As Integer Implements System.Collections.IList.Add
'Add item to collection
End Function
Auf diese Weise kann die Klasse übergeben und als IList verwendet werden, aber ein Programmierer wird es als IList zu verwenden (Of T) ohne die potenziellen Überlastung Unordnung.
So funktioniert dieser Code? Ich bin überrascht. Scheint der Idee einer Schnittstelle sehr entgegengesetzt. – jcollum