Saya punya kelas: Aitu adalah gabungan dari sejumlah kelas yang lebih kecil B,, Cdan D.
B, C, Dan Dmengimplementasikan interface IB, ICdan IDmasing-masing.
Karena Amendukung semua fungsionalitas B, Cdan D, Aimplementasi IB, ICdan IDjuga, tetapi sayangnya hal ini menyebabkan banyak perutean ulang dalam implementasiA
Seperti itu:
interface IB
{
int Foo {get;}
}
public class B : IB
{
public int Foo {get {return 5;}}
}
interface IC
{
void Bar();
}
public class C : IC
{
public void Bar()
{
}
}
interface ID
{
string Bash{get; set;}
}
public class D: ID
{
public string Bash {get;set;}
}
class A : IB, IC, ID
{
private B b = new B();
private C c = new C();
private D d = new D();
public int Foo {get {return b.Foo}}
public A(string bash)
{
Bash = bash;
}
public void Bar()
{
c.Bar();
}
public string Bash
{
get {return d.Bash;}
set {d.Bash = value;}
}
}
Apakah ada cara untuk menyingkirkan pengalihan boilerplate ini A? B, Cdan Dsemua mengimplementasikan fungsionalitas yang berbeda tetapi umum, dan saya suka Amengimplementasikannya IB, ICdan IDkarena itu berarti saya dapat lulus dengan Asendirinya sebagai ketergantungan yang cocok dengan antarmuka tersebut, dan tidak harus mengekspos metode pembantu dalam.
Amengimplementasikan IB, ICdan IDapakah rasanya lebih masuk akal untuk menulis Person.Walk()sebagai kebalikan dari Person.WalkHelper.Walk(), misalnya.