C#にてprivateなメンバを別のクラスにのみ公開したいことがあります。
この1つの実現方法として、
特定のクラスが自身と密接に関係する場合以外は推奨されないと思いますが、
特定のクラスを内部クラスとして定義すれば可能だと知りました。
内部クラスはごくまれにしか定義しないので、今更知りました。
Stateパターンってどう実装するのが良いのだろうと思っていたのですが、
Stateのクラスを外部に公開しないなら内部クラスで良かったのですね。
地味に疑問だったので晴れて良かったです。
/// <summary> partialテストクラス </summary>
internal class SampleClass {
/// <summary> 状態インスタンス </summary>
private IState State { get; set; }
/// <summary> 何かの数 </summary>
private int Count { get; set; }
/// <summary> 具象状態クラス </summary>
internal class ConcreteState : IState {
/// <summary> 何かする </summary>
public void Do(SampleClass parent) {
tester.Count++;
}
}
}
/// <summary> 状態インタフェース </summary>
internal interface IState {
/// <summary> 何かする </summary>
void Do(SampleClass tester);
}
※詳しくないのですが、
Javaだとprotectedがサブクラスだけでなく同一package内ならアクセス可能らしいので、
packageをちゃんと定義すれば可能なのかもしれません。