2011-12-19 2 views
0

추상적 인 멤버를 상속? 매개 변수의 유형은 int 여야합니다. 컴파일러는 당신이 과부하를 선언하는 것을 기대하는 다른 서명을 기대구현 내가 클래스가 말 일반

class B : A<int> { 
    public override void foo(int a) { 
} 

override없이 :

답변

6

, 당신은 override 키워드 누락 :

+0

어리석은 예라고 생각할 수 있습니다. 그러나 당신이 양방향 사전을 구현하고 있다고 상상해보십시오. 'class BiDic {public T this [U u] {get {...}} public U this [Tt] {get {...}}}'- 이렇게하면 끝납니다. 'T'와 'U'에 대해 같은 유형을 사용하지 않는 한 – configurator

4

당신은 override 키워드가 누락되었습니다. 다른 사람들이 지적했듯이

public override void foo(int a) {;} 
1

당신은 override 키워드를 사용해야합니다.

그러나이 패턴에 매우주의해야합니다. 조심하지 않으면 상처를 입을 수 있습니다.

class B<T> 
{ 
    public virtual void M(T t) {} 
    public virtual void M(int x) {} 
} 
class D : B<int> 
{ 
    public override void M(int x) {} 
} 

어느 쪽이 우선합니까?

이 상황에서 아무런 문제가 발생하지 않습니다. CLR 사양에서는 두 가지 메서드 서명이 일반 구성에서 통일되는 상황에 처하지 않도록 권장합니다. 좋은 조언.

0
abstract class N<T> 
{ 
    public abstract void foo(T a); 
} 

class B : N<int> 
{ 
    public override void foo(int a) 
    {    
    } 
}