Interface ou classe abstrata?

Para o meu novo Pet-Project eu tenho uma pergunta para o design, que já está decidida, mas eu quero algumas outras opiniões sobre isso também.

Eu tenho duas classes (simplificadas):

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;}
}

Mais tarde no projetoMyObjectGroup eMyObject deve ser usado igualmente. Para isso eu poderia ir de duas maneiras:

Crie uma interface:IObjectCrie uma classe abstrata:ObjectBase

Eu decidi ir pelo caminho da interface, que depois no código não devo escreverObjectBase toda vez, masIObject apenas por facilidade - mas quais são os outros aspectos positivos para este caminho?

E segundo, que tal adicionarIXmlSerializable para toda a história? Deixe a interface herdar deIXmlSerializable ou tem mais pontos positivos para implementarIXmlSerializable na classe base abstrata?

questionAnswers(15)

yourAnswerToTheQuestion