Ho una classe: Aquesto è un composto di un numero di classi più piccole B, Ce D.
B, CE Dimplementare interfacce IB, ICe IDrispettivamente.
Dal momento che Asupporta tutte le funzionalità di B, Ce D, Aattrezzi IB, ICe IDcosì, ma questo purtroppo porta ad un sacco di ri-instradamento per l'attuazione delA
Così:
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;}
}
}
C'è un modo per sbarazzarsi di uno qualsiasi di questo reindirizzamento del boilerplate A? B, CE Dtutto implementare funzionalità diverse ma comuni, e simili che Aimplementa IB, ICe IDperché significa posso passare in Asé come dipendenza corrispondenza tali interfacce, e non devono esporre i metodi di supporto interno.
Aattrezzo IB, ICed IDè più sensato scrivere Person.Walk()al contrario Person.WalkHelper.Walk(), ad esempio.