| 

.NET C# Java Javascript Exception

4
In VB.NET ist es möglich in einem Inteface komplette Klassen zu definieren. Kann jemand nachvollziehbar den Sinn des Ganzen schildern? Ich bin immer davon ausgegangen das ein Interface eine Art "Vertrag" darstellt und ohne Implementierung daherkommt.

Namespace Views
Public Interface IView
Event OnForceHandlingData As EventHandler(Of EventArg)
Property TaggedInformationString() As String
Sub ForceRefreshData(Optional ByVal MoveToKey As Object = Nothing)
Sub VisualizeLayoutChanged(ByVal changed As Boolean)
Class HeightDefinition
Public Sub New(ByVal DefaultHeight As Integer, Optional ByVal MinHeight As Integer = -1, Optional ByVal MaxHeight As Integer = -1)
Me.DefaultHeight = DefaultHeight
Me.MinHeight = MinHeight
Me.MaxHeight = MaxHeight
End Sub
Public DefaultHeight As Integer
Public MinHeight As Integer
Public MaxHeight As Integer
End Class
End Interface
End Namespace
News:
12.04.2011
Thomas Sczyrba 1,4k 1 2 9
3 Antworten
1
Eine "halbe" Antwort: zu einer Schnittstelle gehören im allgemeinen neben dem Vertrag zum Verhalten der Schnittstelle auch die Beschreibung der Daten, die über diese Schnittstelle ausgetauscht werden, und die Exceptions, die auftreten können. Exceptions kann man nicht hinter einem Interface verbergen und bei Datentypen ist es nicht sinnvoll (warum wohl gibt es kein IString?), also ist es oft so, dass ein Interface mit einigen Klassen eng gekoppelt ist, die in seinen Signaturen auftauchen. Schön ist es, wenn diese allgemeiner Natur sind (wie String eben), aber es kann auch sein, dass sie nur im Kontext der Schnittstelle benötigt werden.

Von daher gibt es eine gewisse Motivation, bestimmte Klassen und Interfaces zusammenhalten zu wollen. Aber ich würde sie deshalb trotzdem in eigene Dateien stecken. VB.NET scheint es auch anders zu ermöglichen, aber ob das auch der Grund ist, warum diese Option geschaffen wurde - das ist die Hälfte der Antwort, die ich schuldig bleiben muss.
12.04.2011
Matthias Hlawatsch 13,2k 4 9
0
Halte für zu sehr gekoppelt.

Das Ziel eines Interfaces ist doch eine Abstraktion. Die Möglichkeit verschiedene Implementierungen für einen Concern zu verwenden.

Nach obiger logik müsste man ja jedes view beim interface implementieren.
Das wird sehr schnell sehr unübersichtlich

Imo sollten Interface und Implementierung getrennt sein.
So kann man sich auch besser auf das Interface fokussieren.
12.04.2011
Gentlehag 1,0k 3 8
Ja, das denke ich mir auch, allerdings zielt meine Frage darauf ab warum diese Art der Interfaceimplementierung möglich ist und nicht warum man diese besser vermeiden sollte.
Thomas Sczyrba 12.04.2011
0
Die guten Sachen einer Programmiersprache verwenden, die schlechten nicht anwenden. Konkrete Klassen in abstrakten Interfaces zu definieren ist absoluter Blödsinn. Es gibt immer Mechanismen, mit denen man Programmierparadigmen wie OO maltretieren kann. Nicht mehr drüber nachdenken, sondern konkrete Dinge von abstrakten trennen.
05.05.2011
oopexpert 455 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH