¿Las funciones que agrega cambian la definición de lo que es la clase, o simplemente creará funciones para manipular datos que ya forman parte de la clase?
Si necesita redefinir aspectos de la clase base de estas dos clases, entonces sí, tendrá que cambiar su estructura de herencia. Pero si las funciones simplemente manipulan los datos que ya forman parte de la clase ahora, le sugiero que utilice la interfaz y cree funciones de utilidad.
Aquí está un ejemplo torpe de lo que quiero decir:
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);
}
}
Sus dos clases de interfaz de usuario se relacionan quizá de esta manera. Me imagino que lo que tienes que hacer de forma transversal se resolverá con un método de utilidad como el que he creado. Creé el método PetUtils.Print
como método de extensión, ya que creará la ilusión expresiva de un método de instancia. Si no está utilizando C# 3, simplemente elimine "this
" del public static void Print(this IPet pet)
.