0

いくつかの子(内部、派生ではない)クラスを持つクラスがあります。理想的には、子クラスの一部のフィールドを親が変更できるようにしたいが、公開しないようにしたい。これを実現するC#のデザインはありますか?典型的なアクセス修飾子(保護、プライベート、パブリックなど)を使用する方法は考えられません

たとえば、想像してみてください

Class Car{
    private Wheel wheel;
    Class Wheel
    {
        //I want this to be only accessible within Car and Wheel
        private int wheelSize;
    }
}

だから、それは私の本当のコードではありませんが、私がうまくやりたいことのアイデアを伝えています。

4

1 に答える 1

3

Wheel追加のパブリックメンバーを持つプライベート内部クラスを派生させることができます。クラスはWheel抽象的です。これにより、インスタンスを作成できなくなります。ホイールを作成する静的メソッドを作成します。このメソッドはを作成しますPrivateWheelが、それをとして返しますWheel。ホイールは常に露出されWheelますが、効果的にはタイプPrivateWheelです。

public class Car {

    private PrivateWheel wheel;

    public Wheel { get { return wheel; } }

    public abstract class Wheel
    {
    }             

    private class PrivateWheel : Wheel
    {
        public int WheelSize { get; set; }
    }

    public static Wheel CreateWheel()
    {
        return new PrivateWheel();
    }
}
于 2012-11-18T20:09:08.860 に答える