Sto iniziando a lavorare a un nuovo progetto personale per inviare e-mail utilizzando diversi servizi di posta elettronica (come mailchimp, ad esempio). Ho appena iniziato a scrivere codice e ho una classe base chiamata Email:
public class Email
{
    private string _to;
    private string _from;
    private string _body;
    private string _templateName;
    public Email(string to, string from, string body, string templateName)
    {
        this._to = to;
        this._from = from;
        this._body = body;
        this._templateName = templateName;
    }
}
un'interfaccia chiamata IEmail:
public interface IEmail
{     
    string Send();
}
e una classe chiamata MailChimpEmail che invierà email usando l'API MailChimps e che eredita da Email e implementa l'interfaccia di IEmail
public class MailChimpEmail : Email, IEmail
{
    private string _body;
    private string _to;
    private string _from;
    private string _templateName;
    public MailChimpEmail (string to, string from, string body, string templateName) : base(to, from, body, templateName)
    {
        this._to = to;
        this._from = from;
        this._body = body;
        this._templateName = templateName;
    }
    public string Send()
    {            
        throw new NotImplementedException();
    }
}
Ho intenzione di utilizzare un altro mittente e-mail di terze parti, quindi non sono legato a uno e creerò una nuova classe e implementerò l'interfaccia di IEmail e erediterò l'e-mail. Ma la mia domanda è: devo davvero ereditare l'email? Supponiamo che le classi non acquisiscano alcuna nuova funzionalità e rimangano tali (quindi posso semplicemente inviare una e-mail, è così), che cosa sto guadagnando ereditando la classe base se sto implementando l'interfaccia? Il metodo Send avrà un'implementazione diversa per ogni classe, quindi quale sarebbe il punto?