IT박스

C # 오류 : 부모에 인수가 0 인 생성자가 없습니다.

itboxs 2020. 6. 19. 19:55
반응형

C # 오류 : 부모에 인수가 0 인 생성자가 없습니다.


내 코드는

public class Parent
{

    public Parent(int i)
    {
        Console.WriteLine("parent");
    }
}

public class Child : Parent
{
    public Child(int i)
    {
        Console.WriteLine("child");
    }

}

오류가 발생합니다.

부모에는 인수가 0 인 생성자가 없습니다.

문제는 Parent인수가 0 인 생성자가 없다는 것입니다. 그러나 내 질문은 왜 인수가 0이 아닌 생성자가 필요한가? 코드가 없으면 왜 작동하지 않습니까?


자식 클래스 생성자의 일부로 부모 생성자를 명시 적으로 호출하지 않기 때문에 매개 변수가없는 부모 생성자가 암시 적으로 호출됩니다. 해당 생성자가 없으므로 오류가 발생합니다.

상황을 정정하려면 명시 적 호출을 추가해야합니다.

public Child(int i) : base(i)
{
    Console.WriteLine("child");
}

또는 매개 변수가없는 부모 생성자를 추가 할 수 있습니다.

protected Parent() { } 

자녀의 생성자를 다음과 같이 변경해야합니다.

public child(int i) : base(i)
{
    // etc...
}

부모 클래스의 생성자가 매개 변수를 사용하기 때문에 오류가 발생했지만 해당 매개 변수를 자식에서 부모로 전달하지 않습니다.

생성자는 C #에서 상속되지 않으므로 수동으로 연결해야합니다.


child클래스 생성자를 다음과 같이 변경해야합니다 .

public child(int i) : base(i)
{
    Console.WriteLine("child");
}

이 부분 : base(i)은 하나의 int매개 변수가있는 기본 클래스의 생성자를 사용해야 함을 의미합니다. 이것이 누락되면 컴파일러가 매개 변수없이 기본 생성자를 사용하도록 암시 적으로 지시합니다. 이러한 생성자는 기본 클래스에 없으므로이 오류가 발생합니다.


컴파일러는 기본 생성자 인수에 전달할 내용을 추측 할 수 없습니다. 명시 적으로해야합니다.

public class child : parent {
    public child(int i) : base(i) {
        Console.WriteLine("child");
    }
}

Parent 클래스에서 매개 변수없이 생성자를 사용할 수 있습니다.

public parent() { } 

By default compiler tries to call parameterless constructor of base class.

In case if the base class doesn't have a parameterless constructor, you have to explicitly call it yourself:

public child(int i) : base(i){
Console.WriteLine("child");}

Ref : Constructor calling hierarchy during inheritance

참고URL : https://stackoverflow.com/questions/7230544/c-sharp-error-parent-does-not-contain-a-constructor-that-takes-0-arguments

반응형