Je sais que ce n'est pas la réponse à votre question, mais depuis il n'y a aucun moyen de faire ce que vous demandez, je pensais que je voudrais partager ma propre approche pour les autres à voir.
J'utilise un hybride de la Marque et Andrew solutions proposées.
Dans mon application, tous les domaine entités dériver d'un abrégé de la classe de base:
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 elle-même définit seulement une simple accesseur:
public interface IHasDescription : IEntity
{
/// <summary>
/// Creates a description (in english) of the Entity.
/// </summary>
string EntityDescription { get; }
}
Alors maintenant, il y a un mécanisme de secours intégrée, ou en d'autres termes, une Entity
qui implémente IHasDescription
doit fournir à l' EntityDescription
, mais tout Entity
pouvez toujours convertir une chaîne de caractères.
Je sais que ce n'est pas radicalement différente de l'autre des solutions proposées ici, mais j'aime l'idée de minimiser la responsabilité de la base Entity
type, de sorte que la mise en œuvre de la description de l'interface reste facultatif, mais vous êtes obligé de mise en œuvre de la description-méthode si vous êtes à la mise en œuvre de l'interface.
À mon humble avis, les interfaces implémentées par l' object
de la classe de base ne devrait pas "compter" tel que mis en œuvre - il serait bien d'avoir une option de compilation pour ça, mais bon...