Interface oder abstrakte Klasse?
-
Guten Mittag :-),
ich hätte eine kleine Frage bezüglich des Softwaredesigns!
Und zwar, wenn ich eigentlich nur Properties (bzw. Felder) brauche...sollte ich dann ein Interface benutzen oder eine abstrakte Basisklasse?Kurzes Beispiel:
interface ITest { int IntegerValue {get;} string StringValue {get;} } class Test : ITest { //Zugriff über z.B. this.integerValue (private) private integerValue; public IntegerValue { get { return this.integerValue; } } private stringValue; public StringValue { get { return this.stringValue; } } }
oder
class Base { private integerValue; public IntegerValue { return this.integerValue; } private stringValue; public StringValue { return this.stringValue; } } class Derived : Base { //Zugriff z.B. über this.IntegerValue (public!!) }
Problem, dass ich sehe bei dem Interface ist, dass wenn ich die Schnittstelle 20 mal implementiere, muss ich 20 mal die Felder neu codieren!
Hoffe einer von euch kann mir eine begründete Lösung für dieses (kleine) Problem liefern :-)!
Danke schonmal!
Grüße
-
Eine Basisklasse hat den Nachteil, dass du allen Klassen, die diese "Schnittstelle" anbieten wollen nicht mehr von einer Basisklasse abgeleitet werden dürfen.
Der einzige Grund in diesem Fall eine Basisklasse zu verwenden ist IMO schreibfaulheit.
Vielleicht ist es auch nur eine Ansammlung von Daten. Dann würde ich lieber ein struct MyData machen und im interface eine Funktion, die MyData zurückgibt.
-
Mach ein Interface IFoo, und eine (abstrakte oder auch nicht) Klasse FooImpl, die die "üblichste" Implementierung des Interfaces enthält.
Dann kannst du 20x FooImpl verwenden, hast aber trotzdem ein halbwegs sauberes Design.