2011-02-01 6 views
2

제네릭 메서드가있는 비 제너릭 기본 클래스가 있습니다. 메서드의 나머지 부분을 추가하여이 메서드를 확장하고 나머지 메서드는 base를 호출하여 동일하게 유지해야합니다. 당신이 당신의 기본 방법에 클래스 제약 조건을 가지고있는 것처럼 여기 예를 들어제네릭 메서드를 제네릭 클래스에서 파생

public override List<T> MyMethod<T>() 
{ 

// do some work in here 
... 
// 

return base.MyMethod<T>(); // **I get an error here saying that T must be a reference type** 
} 
+0

언어를 태그로 지정할 수도 있습니다. C#처럼 보이지만 나는 긍정적이지 않습니다. – Pointy

+0

@pointy 'override'키워드가 있다는 사실 때문에 C# 태그를 추가했습니다 ... –

+0

그것은 C# .net입니다. 죄송합니다. 여러분은 빠릅니다. – Ivan

답변

1

에서 같은 제약 조건이 필요하고 그것을 잘 컴파일 :

public class Base 
{ 
    // Base method has a 'class' constraint 
    public virtual List<T> MyMethod<T>() where T : class 
    { 
     return new List<T>(); 
    } 
} 

public class Derived : Base 
{ 
    // Override does not declare any constraints; constraints are inherited 
    public override List<T> MyMethod<T>() 
    { 
     // base call works just fine 
     return base.MyMethod<T>(); 
    } 
} 

귀하의 오류는 게시 된 코드에 있지 않습니다. 그것은 다른 곳에 있어야합니다.

+0

감사합니다 Timwi, 내 나쁜 (자바 뿌리) 가상은 기본 클래스 메서드에 지정되지 않았습니다. – Ivan

+0

이제이 제한을 해결하는 방법을 알아 내야합니다. ( – Ivan

+0

@Ivan : 기본 메서드를 가상으로 만들거나 (사용자가 지정할 수없는 경우) 다른 메서드 이름을 제공 할 수 있습니다 (그러나 동일한 제네릭 형식 제약 조건) . – Timwi

5

.Method

보인다. 당신은 내가이 시도 재정

+0

예, 제약 조건이 있지만 제약 조건이 상속되기 때문에 직접 추가 할 수 없습니다. – Ivan

+1

@Ivan, 재정의에 동일한 제약 조건을 지정해야하며 제약 조건은 암시 적으로 상속되지 않습니다. – Vadim

+0

컴파일러는 재정의 제약 조건이 기본 메서드에서 상속 받았다고 불평합니다. – Ivan