2011-02-09 8 views
6

프로젝트의 abstract로 기본 클래스를 변경했는데 이제 다음과 같은 오류가 발생합니다."추상 클래스 또는 인터페이스의 인스턴스를 만들 수 없습니다"C# 오류 메시지

Cannot create an instance of the abstract class or interface

abstract 클래스의 새 인스턴스 이름을 지정할 수 없으므로 오류가 발생합니까?

newPlane = new Airplane_Abstract(name, position); 
+1

당신은 정확하게 추측했습니다. –

+1

프레임 워크 지침 프레임 워크 지침 프레임 워크 지침 프레임 워크 지침 – Will

+2

돌아가서 추상적 인 클래스에 대해 조금 읽으면 이마를 치고 "duh"가됩니다. http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx (첫 번째 글 머리 기호) –

답변

18

추상 클래스의 인스턴스를 만들 수 없습니다. 이것을 일부 구현 로직을 포함 할 수있는 인터페이스라고 생각하십시오. 정의가없는 추상 인스턴스 메소드를 호출하면 어떻게 될 것으로 예상됩니까?

+0

물론'abstract' 클래스를 상속 한 구체적인 클래스의 인스턴스를 만들 수 있습니다. 그런 인스턴스는 추상 클래스의 인스턴스라고 할 수 있습니다. –

+0

@JeppeStigNielsen : 추상 클래스는 추상 메서드를 선언하는 클래스입니다. 추상 클래스의 인스턴스를 만들 수는 없습니다 (컴파일러는 그렇게 말할 것입니다!) 물론 추상적이지 않은 하위 클래스의 인스턴스를 만들 수 있습니다.하지만 그건 질문이 아닙니다. (거의 6 년 전에 요청되었습니다 ...) 너의 요점이 뭐야? –

+0

이것은 단지 용어 설명 일뿐입니다. 많은 사람들은 하위 클래스의 인스턴스를 기본 클래스라고 부릅니다. 예를 들어보십시오 [이 답변은 Eric Lippert의 다른 스레드에서] (http : // stackoverflow.com/a/5602284/1336654). 귀하의 대답은 물론 전적으로 정확 합니다만, 나는이 공통적 인 다른 용어가 있다고 말하고 싶었습니다. –

5

추상 클래스의 인스턴스를 만들 수 없습니다. 그건 뭐야 추상을 의미합니다.

13

"순수 가상"(abstract, C#의 의미)에 대한 질문에 이전 질문을 보았습니다. 그것은 아마도 구현이으로, abstract 회원을 가지고 당신이 abstract 클래스를 인스턴스화 할 수 없습니다

이유입니다. 그래서 말할 클래스는 다음과 같습니다 : 다음

abstract class Airplane_Abstract 
{ 
    public abstract int GetSomeInteger(); 
} 

,이 같은 코드를 작성할 수 있습니다 이들 중 하나의 인스턴스 수를 가정 :

var airplane = new Airplane_Abstract(); 

// What would this be? 
int integer = airplane.GetSomeInteger(); 

가 부여 사실 이 당신을 믿지 않는다 추상 클래스에 추상 멤버가 있어야합니다. 그러나 추상적 인 클래스에 대한 일반적인 생각은 그 자체로는 존재할 수 없다는 것입니다. 그것으로부터 상속받은 클래스에서 더 정의되어야한다. 초록 회원은 왜 이것이 가장 명백한가? 다른 이유가있을 수 있습니다.

예를 들어 Shape을 생각해보십시오. 이것은 추상 클래스로 이해할 수있는 아주 일반적인 예입니다. 을 실제로 인스턴스화 할 수 없으며Shape입니다. ("모양 만들기." "어떤 모양?" "종류가 없습니다. 그냥 추상적 인 모양"실제 작동하지 않습니까?)

+0

서사시 ​​설명. :디 –

관련 문제