2012-07-18 2 views
0

지금 당장 일부 코드를보고 있는데 조금 혼란 스럽습니다. 이 클래스는 인터페이스는 아니지만 그 메소드가 정의되지 않은 이유는 무엇입니까? 또한, bedsides 메서드 서명, 거기에 정기적 인 속성이 있습니다. 매우 혼란스러워! 당신은 abstract과 방법을 표시 할 수 있습니다 다음은 abstract 클래스일반 클래스에는 메서드 서명 (예 : 인터페이스) 만 포함될 수 있습니까?

을하지만 왜 그렇게 할 것

+1

아마 추상적입니까? 프로그래머는 자신 만의 서브 클래스를 만들 것을 기대한다. – KingCronus

+0

컴파일하려고했을 때 어떤 일이 발생 했습니까? –

답변

6

아니요, 표시된대로 유효하지 않으므로 컴파일하는 것으로도 충분히 입증 할 수 있습니다. 클래스가 구현되지 않은 메서드를 포함하려면 abstract으로 선언해야하며 구현되지 않은 각 메서드에도 동일하게 적용됩니다.

abstract 클래스는 개념적으로 인터페이스와 유사하지만 구현을 포함 할 수도 있습니다. 이는 일부 메소드가 상속 계층 구조 전체에서 공통 구현을 공유 할 수있는 시나리오에 유용하지만 다른 일부 메소드는 하위 유형으로 구현 될 때 의미가 있습니다.

방법 extern으로 표시 또는 partial도 몸을 결여 수 있지만 (이 네이티브 코드로 구현되도록) extern 방법은 상호 운용성 일반적이며, partial 방법이 다른 .cs 파일에 구현 될 것이다 (그리고에서만 선언 할 수 있습니다 등급은 partial으로 표시).

제쳐두고 자동 (백 그라운드 필드가 생성되고 get/set 메서드가 해당 필드를 반환하거나 설정하는 것을 의미합니다.

+0

ABSTRACT 클래스를 표시했다면 결코 묻지 않을 것입니다. 그는하지 않았기 때문에 나는 뭔가를 놓친다 고 생각했다. 그래서, 거기에 실수가 있다는 것을 안심시켜 주시겠습니까? – Richard77

+1

@ Richard77 : 예, 코드가 컴파일되지 않습니다 (직접 시도하십시오. 몇 초 정도 소요됩니다). 코드 샘플을 기반으로 추상/부분 클래스에 대한 지식은 전혀 추측하지 않았습니다. –

1

을 돕는

public class MyClass 
{ 
    public string Foo(string str1); 
    public string Bar(string str, int i); 

    public string myProperty { get; set; } 
} 

감사합니다? 기본 클래스에 코드가 없으면 인터페이스를 사용하십시오.

+0

그는 구체적인 속성을 가지고 있습니다. – Servy

+1

@Servy Thats 맞습니다.하지만이 경우에도 인터페이스를 사용하는 이유는 변하지 않습니다. – eyossi

+1

인터페이스가 적합 할 수는 있지만 가능한 정보가 충분하지 않습니다. 구현 된 메소드가 OP에 의해 생략되거나 실제 클래스가 논리적으로 계약이 아닌 추상 "부모"유형을 나타낼 수있는 가능성이 있습니다. – Servy

관련 문제