2013-01-02 3 views
7

이것은 정말 간단합니다. Im 확실히,하지만 인터페이스 상에 관해서 말하자면, 상속 말라 키에 대한 내 머리를 얻으려고 고심하고 있습니다.상속 및 인터페이스를 가진 C# 일반 메서드

다음 클래스가 주어지면 기본 메서드를 재정의하지 않고 클래스 부모에 특정한 인터페이스에서 Get 메서드를 어떻게 인터페이스 할 수 있습니까?

public class Base<T, T2> 
{ 
    public T Get<T, T2>(string key) 
    { 
     ... 
    } 
} 

public class Parent : Base<Type1, Type2>, IParent 
{ 
    ... 
} 

는 여기에 내가 기압이 무엇을,하지만 난 오류 "구현되지 inteface을 회원 타입 1 IParent.Get (문자열)"는 점점 계속.

public interface IParent 
{ 
    Type1 Get(string key); 
} 
+1

이미 클래스에 선언되어있는 경우 메소드에 'Get '이 필요하지 않습니다. – ja72

+0

모든 의견을 주셔서 감사합니다.ja72, Krizz, Charles & Guvante 모두 머리에 못을 박았다. 그러나 Charles의 설명은 가장 심오했다. – beterthanlife

답변

2

T Get<T,T2>(string) 방법이 Base<T,T2>이고 Type1 Get(string) 방법이 IParent 인 방법은 두 가지 다른 방법 서명입니다. 둘 다 구현해야합니다. 같은 기능을 사용하기 위해 모두 구현을 원하는 경우에 당신은 할 수있는 다음과 같은 : 나는 원래 의도는 Base<T,T2>에서 Get() 방법을 매개 변수화 아니라고 생각하지만

public class ParentJ : Base<Type1, Type2>, IParent { 
public Type1 Get(string key) { 
    return this.Get<Type1,Type2>(key); 
} 
} 

때문에 당신과 같이 Base를 작성합니다

public class Base<T,T2> { 
    public T Get(string key) { 
    // implementation here 
    } 
} 

해당 서명은 IParent의 서명 서명을 충족시킵니다.

메서드가 포함 된 클래스에서 형식을 유추 할 수 없거나 유추해서는 안되는 경우에만 메서드에 형식 매개 변수 (예 : TT2)가 필요합니다.

5

public T Get<T, T2>(string key) 제네릭 클래스에 제네릭 메서드가 만들어집니다. TT2은이 일반 메소드의 인수가되며 클래스의 TT2과는 아무런 관련이 없습니다.

그냥 public T Get(string key)으로 지정하십시오.

2

일치하는 메소드의 경우이 서명은 정확하게 일치해야합니다. 서명의 구성 요소 중 하나는 일반적인 인수의 개수입니다.

IParent 인터페이스에는 0 유형 인수가있는 Get 메서드가 포함되어 있습니다. Base 클래스에는 두 개의 형식 인수가있는 Get 메서드가 포함되어 있습니다.

Base.Get은 유형 인수를 공유하지만, 사용 된 구문은 클래스의 유형 인수를 음영 처리하는 두 개의 새로운 유형 인수를 작성합니다.

해결 방법은 입력 인수가없는 ParentGet 메서드를 간단히 구현하는 것입니다.

1

시도해보십시오. 기본 Get을 덮어 쓰지 않고 IParent을 구현합니다.

public class Type1 { } 
public class Type2 { } 

public interface IParent 
{ 
    Type1 Get(string key); 
} 

public class Base<T, T2> 
{ 
    public T Get(string key) 
    { 
     return default(T); 
    } 
} 
public class Parent : Base<Type1, Type2>, IParent 
{ 
} 
0

일반적인 IParent 인터페이스를 사용해보십시오.