Programming

C # : 추상 클래스는 인터페이스를 구현해야합니까?

procodes 2020. 7. 10. 21:24
반응형

C # : 추상 클래스는 인터페이스를 구현해야합니까?


C #의 테스트 코드 :

namespace DSnA
{
    public abstract class Test : IComparable
    {

    }
}

다음과 같은 컴파일러 오류가 발생합니다.

error CS0535: 'DSnA.Test' does not implement interface member
'System.IComparable.CompareTo(object)'

클래스 Test추상 클래스 이기 때문에 왜 컴파일러가 인터페이스를 구현하기 위해 클래스를 요구합니까? 이 요구 사항이 구체적인 수업에 대해서만 의무적 이지 않아야 합니까?


C #에서 인터페이스를 구현하는 클래스 는 해당 인터페이스의 모든 멤버를 정의 해야 합니다. 추상 클래스의 경우 abstract키워드를 사용하여 해당 멤버를 정의하면됩니다 .

interface IFoo
{
    void Bar();
}

abstract class Foo : IFoo
{
    public abstract void Bar();
}

아니면 다른 방법을 넣어 : 당신이 하지 에있다 "구현" (추상 클래스에 끔찍한 제한 될 것이다) 그; 그러나 C #에서는 컴파일러에게 의도적으로 벅을 구체적인 서브 클래스로 전달하고 있음 을 알려야합니다 . 위의 코드 줄은 그렇게하는 방법을 보여줍니다.

이것이 질문에 대한 답변이 아니라고 불평하는 의견과 공감대는 요점이 없습니다. 누군가가 스택 오버플로에 와서이 컴파일러 오류를 받았지만 구현을 제공하는 데 실수가되는 추상 클래스가 있으면 좋은 해결책없이 고착됩니다. 런타임 예외를 발생시키는 구현 방법을 작성해야합니다. 끔찍한 작업 -약속-위의 정보를 얻을 때까지 C #에서 이러한 명시 성을 요구하는 것이 좋든 나쁘 든 스택 오버플로의 범위를 벗어나며 질문이나 대답과 관련이 없습니다.


Java와는 달리 C #에서 : "추상 클래스는 클래스의 기본 클래스 목록에 나열된 모든 인터페이스 멤버의 구현을 제공해야하지만 추상 클래스는 인터페이스 메소드를 추상 메소드에 맵핑 할 수 있습니다."

https://msdn.microsoft.com/en-us/library/Aa664595(v=VS.71).aspx


실제로 인터페이스를 구현할 필요는 없습니다 .
인터페이스 방법 / 속성은 추상적이거나 가상적 일 수도 있습니다. 따라서 실제로 구현하기 위해 서브 클래스에 달려 있습니다.

참고 URL : https://stackoverflow.com/questions/2705163/c-abstract-classes-need-to-implement-interfaces

반응형