2012-11-18 3 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' 자체는 private이기 때문에 실제 문제는 아닙니다. –

+0

나는 당신이 대상의 구성 패턴을 찾고 있다고 생각한다. – frenchie

+2

"중첩 된"클래스라고합니다. Wheel 클래스를 private으로 선언하고 wheelSize를 public으로 만들 수 있습니다. –

답변

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 : 외부 코드가 파생 클래스를 '자동차'에 삽입 할 수없는 한 문제는 아닙니다. –

+0

이것은 정말 영리합니다! 감사! – Aerik