2010-04-12 6 views
3

추상 클래스를 인스턴스화 할 수 없으므로 추상 클래스 내에서 생성자가 여전히 허용되는 이유는 무엇입니까?추상 클래스 및 생성자

public abstract class SomeClass 
{ 
    private string _label; 

    public SomeClass(string label) 
    { 
     _label=label; 
    } 
} 
+0

가능한 복제본 http://stackoverflow.com/questions/1682275/whats-the-utility-of-public-constructors-in-abstract-classes-in-c/1682284#1682284 –

+1

중복되지 않음 - public 생성자의 사용은 생성자의 사용법을 묻습니다. – thecoop

답변

11

파생 클래스의 생성자는 여전히 추상 클래스의 생성자를 호출해야합니다. 생성자를 전혀 지정하지 않으면 모든 파생 클래스는 컴파일러에서 제공 한 기본 매개 변수가없는 클래스를 사용해야합니다.

"public"은이 경우 "protected"와 실제로 동일합니다.

3

여전히 다음을 수행 할 수 있기 때문에 : 당신이 볼 수 있듯이

public class SomeChildClass : SomeClass 
{ 
    public SomeChildClass(string label) : base(label){ } 

    public string GetLabel() { return _label; } 
} 

, 자식 클래스 자체의 인스턴스를 생성 (추상 클래스)의 기본 생성자를 호출 할 수 있습니다.

존이 말한 것처럼 public은 실제로 필요하지 않습니다. 실질적으로 protected과 같습니다.