2014-09-27 4 views
1

나는 모든 곳에서 읽기 : 이것이 사실이라면생성자 및 상속

이 생성자는 파생 클래스

에 기본 클래스에서 상속하지 않습니다 다음

어떻게 기본 클래스의 기본 생성자를 호출 할 때 우리는 파생 클래스의 객체를 생성합니까? 예를 들어

:

public class A 
{ 
    public void AA() 
    { 
     //anything 
    } 
} 

public class B : A 
{ 
    public void BB() 
    { 
     //anything 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 

     B Bobject = new B(); // Why it will call class A's default constructor if constructors not inherit from base to derived class 
    } 
} 
+0

이들은 상속되지 않지만 부모를 초기화하기 위해 하위 클래스 생성자에서 계속 호출 할 수 있습니다. – Niko

+0

http://msdn.microsoft.com/en-us/library/ace5hbzh.aspx – RenniePet

+0

기본 생성자가 호출되어 기본을 구성합니다. 파생 클래스 내에서 기본 생성자를 사용하지 않으려면': base (parameter)'구문을 사용하여 다른 생성자를 강제로 호출 할 수 있습니다. –

답변

1

당신은 C# 컴파일러에 의해 생성 된 IL로 볼 수있다. B 생성자에 대해 생성됩니다.

B..ctor: 
IL_0000: ldarg.0  
IL_0001: call  A..ctor 
IL_0006: nop   
IL_0007: nop   
IL_0008: nop   
IL_0009: ret 
+0

당신의 대답은 좋지만 그는 이것의 핵심이 아니라 이것을 원합니다. –

1

기본 클래스의 기본 매개 변수없는 생성자는 항상 암시 적으로 호출됩니다. 기본 클래스에 매개 변수없는 생성자가 없으면 파생 클래스가 해당 생성자를 호출하고 필요한 매개 변수를 제공해야합니다.

는 새로운 기능 를 사용하면 파생 클래스 생성자에 의해 또는 암시하거나, 기본 클래스의 생성자가 inheritered하지 아니 귀하의 질문에 대답하기 위해 지금

Will the base class constructor be automatically called?를 참조 없지만, 어떤 식 으로든를 호출됩니다 키워드

0

이유 :

하여 B 예에서는 인-A A 그것을되는 것은 A의 연장된다. 이 경우 B을 구성하려면 A 비트를 B 전에 구성해야합니다. 그렇지 않으면 B은 액세스 할 수 없으며 A이 제공하는 기능을 액세스 할 수 없습니다.

Sergey Mozhaykin 님의 답변으로 제공됩니다.

기본이 아닌 생성자를 A에 추가하여 매개 변수가없는 기본값을 제거함으로써이 사실을 입증 할 수 있습니다. 따라서 B은 더 이상 A을 생성하는 방법을 알지 못하기 때문에 코드가 컴파일되지 않습니다.