2012-11-18 60 views
0

我有一个类与一些孩子(内部,而不是派生)类。理想情况下,我希望子类的某些字段可以由父母修改,但不能公开。 C#中有没有完成此设计的设计?我能想到的没有办法用典型的访问修饰符(受保护的,私人的,公共的,等等)儿童班的设计模式?

例如,假设

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

所以,这不是我真正的代码,但传达的想法是什么我想做得很好。

+0

嵌套类的字段必须至少为“内部”。但是因为嵌套类'Wheel'本身就是私有的(或者看起来像你的例子),也许这不是一个真正的问题? –

+0

我认为你正在寻找对象构图模式。 – frenchie

+2

它被称为“嵌套”类。您可以将Wheel类声明为private并公开wheelSize。 –

回答

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(); 
    } 
} 
+0

好主意。但是你必须考虑'Car'类之外的代码可能来自嵌套的'Car.Wheel'类。 –

+0

@Jeppe Stig Nielsen:只要外面的代码不能将其派生类注入到'Car'中,那就不是问题。 –

+0

这真的很聪明!谢谢! – Aerik