2010-12-11 5 views
2

미리 감사드립니다.C# : 기본 생성자에서 파생 클래스의 const 변수를 사용하는 방법

제 상황은 라는 추상 클래스가 있다고합니다.

private List<Tire> m_Tires; 

문제는 목록의 타이어 수가 파생 클래스에서 결정된다는 것입니다. 인스턴스화에 필요한 코드는 동일하므로 코드 중복을 피하고 추상 Vehicle 클래스의 생성자에 해당 코드 ( m_Tires를 인스턴스화)를 배치하는 것이 좋습니다.

처음에는 protected abstract void initializeTires();를 파생 클래스에 구현하여 Vehicle의 생성자에서 호출 할 생각이었습니다. 나는 나쁜 프로그래밍과 오류가 발생하기 쉽다는 것을 알았다.

긴 이야기를 짧게 만들려면 : 여기에서 코드 중복을 피할 수 있습니까 아니면 그냥 그걸로 평화를 만들어야합니까?

+1

당신은 기본 클래스에 매개 변수로 타이어 수를 전달할 수있다. – CodesInChaos

답변

4

당신은 protected 생성자를 만들고 그것을 체인 수 있습니다.

+0

슈퍼 빠른 응답 주셔서 감사합니다. 내가 어떻게 그것을 놓쳤는 지 모르겠다. 당신은 내 문제를 해결했습니다. – alonmo

1

어떻게 작성에 대한 : 기본 클래스에

initializeTires(int numberOfTyres); 

을하고 파생 클래스에서 올바른 매개 변수를 사용하여이를 호출합니다.

1

@Oded 그의 예는

public abstract class MyAbstract { 
    private List<Tire> m_Tires; 

    protected MyAbstract(int count) { 
     m_Tires = new List<Tire>(count); 
    } 
} 

public class MyClass : MyAbstract { 
    public MyClass(int count) : base(count) { } 
} 
+0

실제로 내 경우에 더 잘 어울리는 것은 : public abstract class 차량 { 개인 목록 m_Tires; 보호 된 차량 (int i_NumOfTires) { m_Tires = 새 목록 (i_NumOfTires); } } 공용 클래스 자동차 : 차량 { 개인 CONST의 INT k_NumOfTires = 4 대중 차() : 기본 충돌 정보 – alonmo

+0

그래, 내가 가진 약간의 혼란 (k_NumOfTires) {} } ... 당신이 언급 한 당신은 숫자에 기초하여 초기화 할 필요가 있었지만 예제의 init 메소드는 인자를 취하지 않았다. :) –

+0

내가 혼란스러워하는 곳을 본다. 나의 의도는 initializeTires가 const 변수를 직접 참조 할 것이라는 것이었다. 내가 그것을 썼을 때 나는 나에게 분명해 보였지만 조금 혼란 스러울 수 있음을 알았다. – alonmo

관련 문제