2012-06-08 3 views
2

필자가 작성한 코드가 적합한 지 여부는 확실하지 않습니다. 여기에 일반적인 아이디어가 있습니다 :C# : 추상 클래스의 추상 및 비 추상적 메서드?

다른 종류의 문서를 사용하는 파서 클래스가 있습니다. 유형에 따라 문서를 다르게 파싱합니다.

A와 B 두 가지 유형의 문서가 있다고 가정합니다. 팩터 리 패턴은 추가 유형을 처리하기 위해 프로그램을 확장해야하는 경우에 대비하여이 작업을 수행하는 것과 같이 꽤 좋은 방법 인 것 같습니다. 따라서 추상을 갖습니다 수업.

abstract class Parser 
{ 
    ... 
    public void common_method() { 
     // something common that all parsers will use 
     // like file IO 
    } 

    // derived classes will override this 
    public abstract void specific_method(); 
} 

class A_Parser : Parser 
{ 
    ... 
} 

class B_Parser : Parser 
{ 
    ... 
} 

내가 대해 궁금하네요 문제는 내 추상적 파서 추상적 인 방법과 비 추상 메소드를 선언 한 사실이다. 컴파일러는 불평하지 않는 것 같고, 여전히 올바르게 작동하는 것 같습니다.

비표준입니까? 어쩌면 이것을 설계하는 더 좋은 방법이 있을까요?

답변

7

이것은 완벽합니다. 추상적 인 메소드 만 있다면, 본질적으로 인터페이스를 가질 수 있습니다. 필요한 경우 다른 패턴을 사용하여 파서의 실제 인스턴스를 만들어야 할 수도 있지만, 클래스 정의가 나오는 한, 이것은 꽤 표준입니다.

2

이 매우 좋은이며 당신도 필수 수없는 일부 virtual 방법이이 Template Method Pattern의 전형적인 구현

2

오버라이드 (override) 할 수 있습니다. 알고리즘에 대한 일반적인 패턴을 제공하지만 세부 사항은 구체적인 클래스로 구현됩니다.

0

추상 클래스에는 비 추상적 인 메소드가있는 것이 일반적입니다.

Parser 클래스는 추상 클래스이므로 common_method에 액세스 할 수있는 유일한 방법은 A_Parser 또는 B_Parser 클래스의 인스턴스를 사용하는 것입니다.