Je sais que cela ne répond pas votre question, mais puisqu'il n'y a aucun moyen de faire ce que vous demandez, j'ai pensé que je partagerais ma propre approche pour que les autres voient. J'utilise un hybride de Mark et Andrew solutions proposées.
Dans mon application, tous les domaines-entités dérivent d'une classe de base abstraite:
public abstract class Entity
{
/// <summary>
/// Returns a <see cref="System.String"/> that represents this instance.
/// </summary>
public override string ToString()
{
return this is IHasDescription
? ((IHasDescription) this).EntityDescription
: base.ToString();
}
}
L'interface se définit uniquement un accesseur simple:
public interface IHasDescription : IEntity
{
/// <summary>
/// Creates a description (in english) of the Entity.
/// </summary>
string EntityDescription { get; }
}
Alors maintenant, il y a une chute arrière mécanisme intégré - ou en d'autres termes, un Entity
qui implémente IHasDescription
doit fournir le EntityDescription
, mais tout Entity
peut encore convertir en une chaîne. Je sais que ce n'est pas radicalement différent des autres solutions proposées ici, mais j'aime l'idée de minimiser la responsabilité du type de base Entity
, de sorte que la mise en œuvre de l'interface de description reste facultative, mais vous êtes obligé de implémente réellement la méthode de description si vous implémentez l'interface.
à mon humble avis, les interfaces qui sont mises en œuvre par la mise en œuvre comme la classe de base object
ne devrait pas « compter » - il serait agréable d'avoir une option de compilateur pour cela, mais, oh bien ...
http: // stackoverflow.com/questions/239408/can-i-force-subclasses-to-override-a-method-without-making-it-abstract <-? même? ou juste très similaire? –