Interfejs lub klasa abstrakcyjna?
W moim nowym projekcie dla zwierząt domowych mam pytanie do projektu, które zostało już ustalone, ale chcę też mieć inne opinie na ten temat.
Mam dwie klasy (uproszczone):
class MyObject
{
string name {get;set;}
enum relation {get;set;}
int value {get;set;}
}
class MyObjectGroup
{
string name {get;set;}
enum relation {get;set;}
int value {get;set;}
List<MyObject> myobjects {get;set;}
}
Później w projekcieMyObjectGroup
iMyObject
powinny być używane jednakowo. W tym celu mógłbym pójść na dwa sposoby:
IObject
Utwórz klasę abstrakcyjną:ObjectBase
Postanowiłem pójść drogą interfejsu, którego później w kodzie nie wolno pisaćObjectBase
za każdym razem, aleIObject
tylko dla ułatwienia - ale jakie są inne pozytywne cechy w ten sposób?
Po drugie, co z dodawaniemIXmlSerializable
do całej historii? Pozwól interfejsowi dziedziczyć zIXmlSerializable
lub czy ma więcej pozytywów do wdrożeniaIXmlSerializable
w abstrakcyjnej klasie bazowej?