C # 제네릭 형식이 일부 클래스를 구현할 때 클래스를 캐스팅하는 방법

팀창
public class P { }
public class B : P { }
public class A : P { }

public interface Interface<T> where T : P { }
public class IA : Interface<A> { }
public class IB : Interface<B> { }

public class Test
{
    public void WhatTheFuck()
    {
        Interface<P> p;
        p = new IA();// cast error here
        p = new IB();// cast error here
        //... somthing about interface<p>
    }
}

이 오류가 발생합니다.

심각도 코드 설명 프로젝트 파일 줄 억제 상태 오류 CS0266 'AssUploaderSystem.IA'유형을 'AssUploaderSystem.Interface'로 암시 적으로 변환 할 수 없습니다.

클래스 A & B도 클래스 P로 구현되기 때문에 일반적인 솔루션을 만들고 싶습니다.

그래서 한 번만 쓰고 싶지만 어떤 클래스로 캐스팅 할 수 없습니다. 어떻게해야합니까?

아타나시오 스 카타 라스

공분산-반 분산제네릭 인터페이스의 분산 을 이해해야합니다.

인터페이스의 제네릭 형식 매개 변수를 공변 또는 반 변성으로 선언 할 수 있습니다. 공분산을 사용하면 인터페이스 메서드가 제네릭 형식 매개 변수에 정의 된 것보다 더 많은 파생 반환 형식을 가질 수 있습니다. Contravariance는 인터페이스 메소드가 일반 매개 변수에 의해 지정된 것보다 덜 파생 된 인수 유형을 가질 수 있도록합니다. 공변 또는 반 변성 제네릭 유형 매개 변수가있는 제네릭 인터페이스를 변형이라고합니다.

지적했듯이 다음을 사용하여 작동하도록 만들 수 있습니다.

public class P { }
public class B : P { }
public class A : P { }

public interface Interface<out T> where T : P { }
public class IA : Interface<A> { }
public class IB : Interface<B> { }

public class Test
{
    public void WhatTheFuck()
    {
        Interface<P> p;
        p = new IA();// cast error here
        p = new IB();// cast error here
        //... somthing about interface<p>
    }

out 키워드를 사용하여 제네릭 형식 매개 변수 공변을 선언 할 수 있습니다. 공변 유형은 다음 조건을 충족해야합니다.

형식은 인터페이스 메서드의 반환 형식으로 만 사용되며 메서드 인수 형식으로 사용되지 않습니다.

이 유형은 인터페이스 메서드에 대한 일반 제약 조건으로 사용되지 않습니다. 이것은 다음 코드에 설명되어 있습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C # 제네릭에서 자식을 부모 클래스로 캐스팅하는 방법

분류에서Dev

C #에서 제네릭 형식과 클래스를 비교하는 방법

분류에서Dev

C #에서 제네릭 형식으로 인터페이스를 구현하는 클래스 팩토리?

분류에서Dev

Gson 직렬화 : 제네릭 클래스 및 제네릭 데이터를 내부에 캐스팅하는 방법은 무엇입니까?

분류에서Dev

개체를 하위 클래스에 대한 제네릭 형식으로 캐스팅하는 방법?

분류에서Dev

Angular : 자식 요소를 클릭 할 때 부모에 클래스를 추가하는 방법

분류에서Dev

제네릭 형식의 클래스를 반환하는 방법

분류에서Dev

스위프트에서 수퍼 클래스가 제네릭 클래스 일 때 수퍼 클래스를 상속하는 방법

분류에서Dev

C ++ 클래스를 사용하여 제네릭 데이터 형식을 만들려고 할 때 발생하는 문제

분류에서Dev

유형이 제네릭 기본 클래스를 구현하는지 확인하는 방법

분류에서Dev

메뉴 외부를 클릭 할 때 토글 된 클래스를 제거하는 방법

분류에서Dev

제거 할 클래스를 클릭 할 때 제거하는 방법

분류에서Dev

추상 클래스로 인터페이스를 부분적으로 만 구현할 때 컴파일러를 만족시키는 방법은 무엇입니까?

분류에서Dev

제네릭 인터페이스를 구현하는 클래스의 C # 팩토리

분류에서Dev

제네릭 클래스에서 Iterable <> 메서드를 구현하는 방법

분류에서Dev

C # 제네릭 형식을 다른 클래스에 전달하는 방법

분류에서Dev

제네릭 인터페이스를 구현하는 클래스의 제네릭 유형 정의 쿼리

분류에서Dev

클래스 상속 및 제네릭 형식 상속이있는 C # 컬렉션은 상속 된 클래스를 추가 할 수 없습니다.

분류에서Dev

클래스가 이미있을 때 SR 전용 클래스를 구현하는 방법

분류에서Dev

제네릭 + 공용체 유형 [Typescript]를 사용하여 클래스에서 추상 메소드를 구현할 때 유형 안전성 문제

분류에서Dev

템플릿 클래스를 구현할 때 C ++ 컴파일 오류

분류에서Dev

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

분류에서Dev

일반적으로 동일한 부모 클래스를 공유 할 때 다른 자식 클래스의 자식 클래스에 액세스하는 방법이 있습니까?

분류에서Dev

동일한 클래스의 클래스를 클릭 할 때 표를 표시하고 숨기는 가장 좋은 방법

분류에서Dev

자식 클래스 메서드에서 부모 클래스 메서드를 구현하는 방법

분류에서Dev

제네릭 클래스를 기반으로 제네릭 인터페이스를 정의하는 방법

분류에서Dev

PHP는 부모 클래스의 네임 스페이스 상속에서 클래스를 중지하는 방법

분류에서Dev

C # 8에서 하위 클래스 제약 조건을 사용할 때 제네릭 참조 형식이 nullable이되도록 지정하는 방법은 무엇입니까?

분류에서Dev

인터페이스를 구현하는 클래스의 제네릭 유형과 인터페이스?

Related 관련 기사

  1. 1

    C # 제네릭에서 자식을 부모 클래스로 캐스팅하는 방법

  2. 2

    C #에서 제네릭 형식과 클래스를 비교하는 방법

  3. 3

    C #에서 제네릭 형식으로 인터페이스를 구현하는 클래스 팩토리?

  4. 4

    Gson 직렬화 : 제네릭 클래스 및 제네릭 데이터를 내부에 캐스팅하는 방법은 무엇입니까?

  5. 5

    개체를 하위 클래스에 대한 제네릭 형식으로 캐스팅하는 방법?

  6. 6

    Angular : 자식 요소를 클릭 할 때 부모에 클래스를 추가하는 방법

  7. 7

    제네릭 형식의 클래스를 반환하는 방법

  8. 8

    스위프트에서 수퍼 클래스가 제네릭 클래스 일 때 수퍼 클래스를 상속하는 방법

  9. 9

    C ++ 클래스를 사용하여 제네릭 데이터 형식을 만들려고 할 때 발생하는 문제

  10. 10

    유형이 제네릭 기본 클래스를 구현하는지 확인하는 방법

  11. 11

    메뉴 외부를 클릭 할 때 토글 된 클래스를 제거하는 방법

  12. 12

    제거 할 클래스를 클릭 할 때 제거하는 방법

  13. 13

    추상 클래스로 인터페이스를 부분적으로 만 구현할 때 컴파일러를 만족시키는 방법은 무엇입니까?

  14. 14

    제네릭 인터페이스를 구현하는 클래스의 C # 팩토리

  15. 15

    제네릭 클래스에서 Iterable <> 메서드를 구현하는 방법

  16. 16

    C # 제네릭 형식을 다른 클래스에 전달하는 방법

  17. 17

    제네릭 인터페이스를 구현하는 클래스의 제네릭 유형 정의 쿼리

  18. 18

    클래스 상속 및 제네릭 형식 상속이있는 C # 컬렉션은 상속 된 클래스를 추가 할 수 없습니다.

  19. 19

    클래스가 이미있을 때 SR 전용 클래스를 구현하는 방법

  20. 20

    제네릭 + 공용체 유형 [Typescript]를 사용하여 클래스에서 추상 메소드를 구현할 때 유형 안전성 문제

  21. 21

    템플릿 클래스를 구현할 때 C ++ 컴파일 오류

  22. 22

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

  23. 23

    일반적으로 동일한 부모 클래스를 공유 할 때 다른 자식 클래스의 자식 클래스에 액세스하는 방법이 있습니까?

  24. 24

    동일한 클래스의 클래스를 클릭 할 때 표를 표시하고 숨기는 가장 좋은 방법

  25. 25

    자식 클래스 메서드에서 부모 클래스 메서드를 구현하는 방법

  26. 26

    제네릭 클래스를 기반으로 제네릭 인터페이스를 정의하는 방법

  27. 27

    PHP는 부모 클래스의 네임 스페이스 상속에서 클래스를 중지하는 방법

  28. 28

    C # 8에서 하위 클래스 제약 조건을 사용할 때 제네릭 참조 형식이 nullable이되도록 지정하는 방법은 무엇입니까?

  29. 29

    인터페이스를 구현하는 클래스의 제네릭 유형과 인터페이스?

뜨겁다태그

보관