자식 클래스를 일반 조부모로 변환

데이터베이스의 서로 다른 테이블에 매핑되는 약 12 ​​개의 다르지만 매우 유사한 개체를 사용하여 동일한 작업을 수행하는 기능을 제공해야하는 상황에 처했습니다. 그래서 상속과 제네릭을 모두 다룰 수있는 좋은 기회라고 생각했습니다.

나는 Grandparent-> Parent-> Child관계가 있고 Child를 기대하는 함수 에 전달할 수 있어야 Grandparent하는 문제에 봉착했습니다. 제네릭을 사용하지 않는 경우 잘 작동합니다. 내가 얻는 오류는 다음과 같습니다.

' ChildA'인수 유형은 매개 변수 유형 ' GrandparentA<ParentB,ParentC>'에 할당 할 수 없습니다.

아래는 내가 시도한 것의 매우 단순화 된 버전이지만 여전히 동일한 오류가 발생합니다.

void Main()
{
    var child = new ChildA();

    DoSomething(child);
}

public void DoSomething(GrandParentA<ParentB, ParentC> Data) { }

public abstract class GrandParentA<T1, T2> 
    where T1 : ParentB
    where T2 : ParentC
{
    public abstract T1 Foo { get; set; }
    public abstract T2 Bar { get; set; }
}

public abstract class ParentA<T> : GrandParentA<ChildB, T>
    where T : ParentC
{
    public override abstract ChildB Foo { get; set; }
    public override abstract T Bar { get; set; }
}

public class ChildA : ParentA<ChildC> 
{ 
    public override ChildB Foo { get; set; }
    public override ChildC Bar { get; set; }
}

public abstract class ParentB { }

public class ChildB : ParentB { }

public abstract class ParentC { }

public class ChildC : ParentC { }   

에 대한 호출과 함께 발생하는 컴파일러 오류 DoSomething(child)는에 대한 모든 것이 child조부모가 가지고있는 것에 업 캐스트 될 수 있기 때문에 작동 할 것이라고 생각 했습니다. 혼동 할 다운 캐스팅이 없습니다 (올바른 방법으로 업 / 다운을 받았다고 생각합니다! ?) 내가 어디로 잘못 가고 있습니까?

사용자 4003407

클래스는 변하지 GrandParentA<ParentB, ParentC>않으므로에서 할당 할 수 없습니다 GrandParentA<ChildB, ChildC>. 따라서 DoSomething메소드를 제네릭 으로 만들어야 하므로 GrandParentA모든 제네릭 매개 변수를 사용할 수 있습니다 .

public void DoSomething<T1, T2>(GrandParentA<T1, T2> Data)
    where T1 : ParentB
    where T2 : ParentC

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

부모 클래스의 const 참조를 파생 된 자식 개체로 변환

분류에서Dev

부모 자식 구조를 자식 부모로 변환

분류에서Dev

Java에서 부모 클래스를 자식으로 변환

분류에서Dev

모델 변환에서 내부 클래스를 일반 클래스로 변환하는 방법

분류에서Dev

함수 반환 유형이 부모 클래스 일 때 자식 클래스의 개체를 반환하는 방법은 무엇입니까?

분류에서Dev

형식 개체를 형식으로 동적으로 변환 (일부 클래스)

분류에서Dev

Python, 기존 부모 클래스 개체를 자식 클래스 개체로 변환하는 방법

분류에서Dev

Swift : 자식 클래스는 부모 클래스 속성을 반환합니다.

분류에서Dev

일반 클래스로 변환시 Kotlin

분류에서Dev

C # 문자열 YYYYDDD를 일반 날짜 형식으로 변환

분류에서Dev

Typescript 부모 클래스 메서드는 자식 속성에 의한 유형 변경을 반환합니다.

분류에서Dev

jQuery : 자식 클래스의 값으로 요소를 반환하는 방법

분류에서Dev

자식 클래스의 개체를 반환하는 일반 게터

분류에서Dev

목록의 모든 개체를 자식 클래스로 변환합니다.

분류에서Dev

Swift를 사용하여 일부 클래스 유형의 Arraylist를 JSON 형식으로 변환

분류에서Dev

일반 형식 매개 변수 C #-일반 클래스 반환 형식 방법

분류에서Dev

부모 클래스와 동일한 매개 변수가있는 경우 자식 클래스가 생성자를 재정의해야합니까?

분류에서Dev

유형 힌팅 자체를 반환하는 자식 클래스

분류에서Dev

부모 ID를 기반으로 jQuery를 사용하여 자식 클래스 요소의 HTML을 변경 하시겠습니까?

분류에서Dev

람다 쿼리의 == 조건과 일치하도록 클래스를 문자열로 변환

분류에서Dev

Android에서 클래스 유형별로 자식 요소 반환

분류에서Dev

일반 클래스 라이브러리를 ASP.NET 5 (vnext)로 변환

분류에서Dev

부모에서 자식 프로세스로 문자를 보내고 C의 부모에게 문자 수 반환

분류에서Dev

추상 클래스를 Java에서 일반 클래스의 자식으로 만들 수 있습니까?

분류에서Dev

동일한 부모의 다른 자식 클래스에있는 반환 함수는 아무것도 반환하지 않습니다.

분류에서Dev

변수 형식을 사용하여 자식 클래스를 부모로 캐스팅

분류에서Dev

Bibtex 클래스 객체를 각 인용에 대해 형식이 지정된 일련의 텍스트 문자열로 변환

분류에서Dev

VB를 사용하여 RTF 형식의 문자열을 일반 텍스트 문자열로 변환

분류에서Dev

모의를 반환하는 모의 클래스 매개 변수

Related 관련 기사

  1. 1

    부모 클래스의 const 참조를 파생 된 자식 개체로 변환

  2. 2

    부모 자식 구조를 자식 부모로 변환

  3. 3

    Java에서 부모 클래스를 자식으로 변환

  4. 4

    모델 변환에서 내부 클래스를 일반 클래스로 변환하는 방법

  5. 5

    함수 반환 유형이 부모 클래스 일 때 자식 클래스의 개체를 반환하는 방법은 무엇입니까?

  6. 6

    형식 개체를 형식으로 동적으로 변환 (일부 클래스)

  7. 7

    Python, 기존 부모 클래스 개체를 자식 클래스 개체로 변환하는 방법

  8. 8

    Swift : 자식 클래스는 부모 클래스 속성을 반환합니다.

  9. 9

    일반 클래스로 변환시 Kotlin

  10. 10

    C # 문자열 YYYYDDD를 일반 날짜 형식으로 변환

  11. 11

    Typescript 부모 클래스 메서드는 자식 속성에 의한 유형 변경을 반환합니다.

  12. 12

    jQuery : 자식 클래스의 값으로 요소를 반환하는 방법

  13. 13

    자식 클래스의 개체를 반환하는 일반 게터

  14. 14

    목록의 모든 개체를 자식 클래스로 변환합니다.

  15. 15

    Swift를 사용하여 일부 클래스 유형의 Arraylist를 JSON 형식으로 변환

  16. 16

    일반 형식 매개 변수 C #-일반 클래스 반환 형식 방법

  17. 17

    부모 클래스와 동일한 매개 변수가있는 경우 자식 클래스가 생성자를 재정의해야합니까?

  18. 18

    유형 힌팅 자체를 반환하는 자식 클래스

  19. 19

    부모 ID를 기반으로 jQuery를 사용하여 자식 클래스 요소의 HTML을 변경 하시겠습니까?

  20. 20

    람다 쿼리의 == 조건과 일치하도록 클래스를 문자열로 변환

  21. 21

    Android에서 클래스 유형별로 자식 요소 반환

  22. 22

    일반 클래스 라이브러리를 ASP.NET 5 (vnext)로 변환

  23. 23

    부모에서 자식 프로세스로 문자를 보내고 C의 부모에게 문자 수 반환

  24. 24

    추상 클래스를 Java에서 일반 클래스의 자식으로 만들 수 있습니까?

  25. 25

    동일한 부모의 다른 자식 클래스에있는 반환 함수는 아무것도 반환하지 않습니다.

  26. 26

    변수 형식을 사용하여 자식 클래스를 부모로 캐스팅

  27. 27

    Bibtex 클래스 객체를 각 인용에 대해 형식이 지정된 일련의 텍스트 문자열로 변환

  28. 28

    VB를 사용하여 RTF 형식의 문자열을 일반 텍스트 문자열로 변환

  29. 29

    모의를 반환하는 모의 클래스 매개 변수

뜨겁다태그

보관