私は部分クラスを使用して何か奇抜なことをしましたが、混乱の少ないアプローチを使用して同じことを達成した可能性のある確立されたパターンが既に存在するかどうか疑問に思っています。
問題:
派生クラスが呼び出されたときに機能するように設計された、保護されたメンバーと仮想メソッドを持つ基本クラスがありました。
この作業をワーカーのリストに委任したかったのです。
ただし、ワーカーが保護されたメンバーにアクセスできるようにする必要がありました。
私のおそらく過度に複雑な解決策:
注:これはクラスが部分的であることに依存していることに気づきました-それで問題ありませんが、それを必要としない解決策があれば素晴らしいでしょう...
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