Les fonctions que vous ajoutez vont-elles changer la définition de ce qu'est la classe, ou créerez-vous simplement des fonctions pour manipuler des données qui font déjà partie de la classe?
Si vous devez redéfinir des aspects de la classe de base de ces deux classes, alors oui, vous devrez modifier votre structure d'héritage. Mais si les fonctions vont simplement manipuler des données qui font déjà partie de la classe maintenant, je vous suggère d'utiliser l'interface et de créer des fonctions utilitaires.
Voici un exemple maladroit de ce que je veux dire:
using System;
abstract class Pet { }
class Dog : Pet, IPet
{
public String Name { get; set; }
public Int32 Age { get; set; }
}
class Cat : Pet, IPet
{
public String Name { get; set; }
public Int32 Age { get; set; }
}
interface IPet
{
String Name { get; set; }
Int32 Age { get; set; }
}
static class PetUtils
{
public static void Print(this IPet pet)
{
Console.WriteLine(pet.Name + " is " + pet.Age);
}
}
Vos deux classes de l'interface utilisateur sont liées peut-être de cette façon. J'imagine que ce que vous devez faire d'une manière transversale serait résolu par une méthode utilitaire comme celle que j'ai créée. J'ai créé la méthode PetUtils.Print
en tant que méthode d'extension car cela créera l'illusion expressive d'une méthode d'instance. Si vous n'utilisez pas C# 3, supprimez simplement "this
" de public static void Print(this IPet pet)
.