TDM Geschrieben 6. Januar 2009 Geschrieben 6. Januar 2009 Grüße, mich beschäftigt seit einiger Zeit das Problem, ob es möglich ist eine Property eines Interfaces mit Interfacevererbung umzubenennen. Bei einfacher expliziter Interfaceimplementierung ist dies ja einfach realisierbar: Interface IFooBar Property FooBar() As Double End Interface Class FooBar : Implements IFooBar Public Property FooBar() As Double Get '... End Get Set(ByVal value As Double) '... End Set End Property Public Property IFooBarsFooBar() As Double Implements IFooBar.FooBar Get '... End Get Set(ByVal value As Double) '... End Set End Property End Class Da dacht ich mir, wenn das so geht, dann kann ich auch noch ein Interface dazwischenschalten, welches die Eigenschaft des Interfaces einfach umbenennt: Interface A Property foo() As Double End Interface Interface B : Inherits A Property bar() As Double Implements A.foo End Interface Class C : Implements B Public Property bar() As Double Implements B.bar Get '... End Get Set(ByVal value As Double) '... End Set End Property End Class Funktioniert so aber nicht, weil: Class 'C' must implement 'Property foo() As Double' for interface 'A'. Implementing property must have matching 'ReadOnly' or 'WriteOnly' specifiers. Warum ist das so? Ich hab doch in B geschrieben, dass die Property bar gleichzeitig die Property foo repräsentiert. Gibt es da irgend eine Möglichkeit oder ist das nicht machbar? Zitieren
flashpixx Geschrieben 6. Januar 2009 Geschrieben 6. Januar 2009 Wenn ich das noch richtig im Kopf habe, ist die Vererbung eine Menge: Deine Klasse B ist eine Obermenge von C und A Obermenge von B, das impliziert dass A ebenfalls Obermenge von C ist und somit muss in C alles aus A implementiert sein und zusätzlich das aus B HTH Phil Zitieren
TDM Geschrieben 6. Januar 2009 Autor Geschrieben 6. Januar 2009 Ja, aber wenn ich sage, dass B.bar gleichzeitig A.foo implementiert müsste das doch heißen, dass A.foo implementiert ist, wenn B.bar implementiert wurde. :confused: Komische Sprache... Zitieren
words_of_silence Geschrieben 6. Januar 2009 Geschrieben 6. Januar 2009 Interface B : Inherits A B erbt von A - das heißt, B besitzt foo von A, auch wenn du in der Schnittstelle A.foo durch bar implementierst. Einfach die Vererbung rauslassen Interface B und es sollte gehen. Zitieren
TDM Geschrieben 8. Januar 2009 Autor Geschrieben 8. Januar 2009 B erbt von A - das heißt, B besitzt foo von A, auch wenn du in der Schnittstelle A.foo durch bar implementierst. Einfach die Vererbung rauslassen Die Vererbung von A kann ich nicht rauslassen, da einige Funktionen einen A-Typ als Parameter brauchen. Das Problem entsteht nur wegen der besseren Lesbarkeit, aber wenns nicht geht, ist das auch ok... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.