Czy dodane funkcje zmieniają definicję klasy, czy też po prostu tworzysz funkcje manipulowania danymi, które są już częścią klasy?
Jeśli potrzebujesz przedefiniować aspekty klasy bazowej tych dwóch klas, to tak, musisz zmienić strukturę dziedziczenia. Ale jeśli funkcje będą po prostu manipulować danymi, które są już częścią klasy, to sugerowałbym, abyś używał interfejsu i tworzył funkcje narzędziowe.
Oto niezdarny przykładem tego, co mam na myśli:
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);
}
}
Twoje dwie klasy UI są prawdopodobnie związane w ten sposób. Wyobrażam sobie, że to, co musisz zrobić w sposób przekrojowy, zostanie rozwiązane za pomocą metody użyteczności, takiej jak ta, którą stworzyłem. Stworzyłem metodę PetUtils.Print
jako metodę rozszerzenia, ponieważ stworzy to ekspresyjną iluzję metody instancji. Jeśli nie używasz C# 3, po prostu usuń "this
" z public static void Print(this IPet pet)
.