我只是使用部分类做了一些古怪的事情,我想知道是否有一个已经建立的模式可以使用一种不那么令人困惑的方法完成同样的事情。
问题:
我有一个基类,其中包含受保护的成员和为派生类设计的虚拟方法,以便在调用它们时工作。
我想把这项工作委托给一份工人名单。
但是,我需要工作人员可以访问受保护的成员。
我可能过于复杂的解决方案:
注意:我意识到这取决于类是部分的 - 我可以接受,但如果有一个不需要它的解决方案会很酷......
void Main()
{
ABase aBase = new ADerived();
aBase.DoWork();
}
public partial class ABase
{
protected int state1 = 1;
protected int state2 = 2;
List<ABase> workers;
public ABase()
{
workers = new List<ABase>();
CreateWorkers(workers);
}
protected virtual void CreateWorkers(List<ABase> workers)
{
}
public ABase(ABase aBase)
{
this.Target = aBase;
}
public virtual void DoWork()
{
foreach (var worker in this.workers)
{
worker.DoWork();
}
}
protected ABase Target { get; private set; }
}
public partial class ABase
{
public class Worker1 : ABase
{
public Worker1(ABase aBase) : base(aBase) { }
public override void DoWork()
{
Console.WriteLine (Target.state1);
}
}
public class Worker2 : ABase
{
public Worker2(ABase aBase) : base(aBase) { }
public override void DoWork()
{
Console.WriteLine (Target.state2);
}
}
}
public class ADerived : ABase
{
protected override void CreateWorkers(List<ABase> workers)
{
workers.Add(new Worker1(this));
workers.Add(new Worker2(this));
}
}
输出:
1
2