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:

Utwórz interfejs:IObjectUtwó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?

questionAnswers(15)

yourAnswerToTheQuestion