C #의 제네릭 클래스 내에서 제네릭 클래스의 개체를 사용하는 방법은 무엇입니까?

라마 라즈 T

일반 클래스가 있습니다. 그리고이 제네릭 클래스에는 멤버 중 하나와 동일한 클래스의 다른 인스턴스가 있어야합니다.

기본적으로 일련의 작업을 수행하려고합니다. 따라서 모든 클래스는 작업을 계속하기 위해 다음 항목을 알아야합니다.

ChainedItem (Uri)-> ChainedItem (String)-> ChainedItem (MyClass)-> ....

이것이 내가 지금까지 시도한 것입니다.

public abstract class ChainedItem<T>
{        
    private ChainedItem<R> m_chainedItem;

    public void SetNextChainedItem(ChainedItem<R> chainedItem)
    {
        m_chainedItem = chainedItem;
    }

    public abstract void DoOperation(T data);

    public virtual void ContinueNextOperation<R>(R data)
    {
        if(m_chainedItem != null)
            m_chainedItem.DoOperation(data);
    }
}

그러나 R줄에 # 3이 아직 정의되지 않았기 때문에 이렇게 사용할 수 없습니다 .

여기에 이미지 설명 입력

올리비에 로지에

컴파일러에서 지원하지 않기 때문에 실제로 불가능합니다. 그렇지 않으면 템플릿보다 더 엄격한 .NET 사양에 의해 현재 정의 된 제네릭 유형 확인으로 인해 무한하고 불가능한 컴파일러의 스택 오버플로가 발생할 수 있습니다. C ++.

LinkedList<ChainedItem<>>하지만 다이아몬드 연산자를 사용할 수 있으므로 C #에서는 진정한 일반 다형성을 사용할 수 없습니다.

C #에서 열린 형식에 대한 일반 다형성을 수행하는 방법은 무엇입니까?

따라서 아마도 널 값을 제외하고 인터페이스 및 유형 검사를 사용하여 이러한 것을 작성할 수 있습니다.

public interface IChainedItem
{
  void DoOperation(object value);
}
public abstract class ChainedItem<T> : IChainedItem
{
  private IChainedItem m_chainedItem;

  public void SetNextChainedItem(IChainedItem chainedItem)
  {
    m_chainedItem = chainedItem;
  }

  public abstract void DoOperation(T data);

  public virtual void ContinueNextOperation(object data)
  {
    if ( m_chainedItem != null )
      m_chainedItem.DoOperation(data);
  }

  public void DoOperation(object value)
  {
    if ( value == null )
      throw new ArgumentNullException();
    var typeIn = value.GetType();
    var typeRequired = typeof(T);
    if ( typeIn != typeRequired )
    {
      string message = $"Bad type in ChainedItem.DoOperation(object): "
                     + $"{typeRequired.Name} is required and not {typeIn.Name}.";
      throw new ArgumentException(message);
    }
    DoOperation((T)value);
  }
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C # 제네릭을 사용하여 클래스의 개체를 T 형식의 개체로 변환하는 방법은 무엇입니까?

분류에서Dev

Java의 제네릭 유형에서 클래스를 유추하는 방법은 무엇입니까?

분류에서Dev

Java의 제네릭 유형에서 클래스를 유추하는 방법은 무엇입니까?

분류에서Dev

제네릭을 사용하여 입력하는 추상 클래스에서 메서드를 재정의하는 방법은 무엇입니까?

분류에서Dev

C #으로 제네릭 클래스의 동적 클래스 속성에 액세스하는 방법은 무엇입니까?

분류에서Dev

Scala에서 Java 제네릭 내부 클래스를 인스턴스화하는 방법은 무엇입니까?

분류에서Dev

C #의 기본 클래스에서 제네릭 사용 : 기본 클래스의 메서드가 파생 클래스의 형식을 반환하는지 확인하는 방법은 무엇입니까?

분류에서Dev

내부 클래스 멤버의 제네릭 형식을 참조하는 방법은 무엇입니까?

분류에서Dev

속성 유형이 제네릭 유형을 포함하는 경우 제네릭 클래스의 속성에 제네릭 JsonConverter를 적용하는 방법은 무엇입니까?

분류에서Dev

WPF 컨트롤에서 상속하고 C #에서 제네릭 클래스를 동시에 사용하는 방법은 무엇입니까?

분류에서Dev

제네릭을 사용하여 캐스팅하지 않고 공통 수퍼 클래스 및 해당 컬렉션이있는 다른 클래스의 개체에 대해 정의 된 작업을 처리하는 방법은 무엇입니까?

분류에서Dev

C #의 제네릭 클래스가있는 제네릭 메서드

분류에서Dev

C ++ : 제네릭 클래스의 비 제네릭 메서드?

분류에서Dev

C ++ : 제네릭 클래스의 비 제네릭 메서드?

분류에서Dev

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

분류에서Dev

C #에서 제네릭 Lazy 클래스의 공변 사용

분류에서Dev

제네릭 클래스에 중첩 된 클래스를 C #의 형식 매개 변수로 사용

분류에서Dev

다른 제네릭 기본 클래스에 C # 제네릭 형식 제약 조건을 추가하는 방법은 무엇입니까?

분류에서Dev

제네릭으로 제네릭 클래스의 클래스 유형을 반환하는 방법은 무엇입니까?

분류에서Dev

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

분류에서Dev

C #에서 제네릭 매개 변수의 연산자를 제한하는 방법은 무엇입니까?

분류에서Dev

Ruby에서 네임 스페이스 클래스를 정의 해제하는 방법은 무엇입니까?

분류에서Dev

수업은 무엇입니까? (물음표가있는 클래스) C # 제네릭 형식 제약 조건에서 의미합니까?

분류에서Dev

제네릭 유형의 클래스를 다른 클래스의 컬렉션에 사용할 수 있습니까?

분류에서Dev

Kotlin에서 제네릭 클래스를 동일한 클래스의 제네릭 배열에 매핑하는 방법

분류에서Dev

JAVA의 제네릭 클래스에서 오버라이드 메서드를 사용하는 방법

분류에서Dev

C ++에서 제네릭 기본 클래스를 초기화하는 방법

분류에서Dev

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

분류에서Dev

클래스가 아닌 제네릭 유형을 정의하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    C # 제네릭을 사용하여 클래스의 개체를 T 형식의 개체로 변환하는 방법은 무엇입니까?

  2. 2

    Java의 제네릭 유형에서 클래스를 유추하는 방법은 무엇입니까?

  3. 3

    Java의 제네릭 유형에서 클래스를 유추하는 방법은 무엇입니까?

  4. 4

    제네릭을 사용하여 입력하는 추상 클래스에서 메서드를 재정의하는 방법은 무엇입니까?

  5. 5

    C #으로 제네릭 클래스의 동적 클래스 속성에 액세스하는 방법은 무엇입니까?

  6. 6

    Scala에서 Java 제네릭 내부 클래스를 인스턴스화하는 방법은 무엇입니까?

  7. 7

    C #의 기본 클래스에서 제네릭 사용 : 기본 클래스의 메서드가 파생 클래스의 형식을 반환하는지 확인하는 방법은 무엇입니까?

  8. 8

    내부 클래스 멤버의 제네릭 형식을 참조하는 방법은 무엇입니까?

  9. 9

    속성 유형이 제네릭 유형을 포함하는 경우 제네릭 클래스의 속성에 제네릭 JsonConverter를 적용하는 방법은 무엇입니까?

  10. 10

    WPF 컨트롤에서 상속하고 C #에서 제네릭 클래스를 동시에 사용하는 방법은 무엇입니까?

  11. 11

    제네릭을 사용하여 캐스팅하지 않고 공통 수퍼 클래스 및 해당 컬렉션이있는 다른 클래스의 개체에 대해 정의 된 작업을 처리하는 방법은 무엇입니까?

  12. 12

    C #의 제네릭 클래스가있는 제네릭 메서드

  13. 13

    C ++ : 제네릭 클래스의 비 제네릭 메서드?

  14. 14

    C ++ : 제네릭 클래스의 비 제네릭 메서드?

  15. 15

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

  16. 16

    C #에서 제네릭 Lazy 클래스의 공변 사용

  17. 17

    제네릭 클래스에 중첩 된 클래스를 C #의 형식 매개 변수로 사용

  18. 18

    다른 제네릭 기본 클래스에 C # 제네릭 형식 제약 조건을 추가하는 방법은 무엇입니까?

  19. 19

    제네릭으로 제네릭 클래스의 클래스 유형을 반환하는 방법은 무엇입니까?

  20. 20

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

  21. 21

    C #에서 제네릭 매개 변수의 연산자를 제한하는 방법은 무엇입니까?

  22. 22

    Ruby에서 네임 스페이스 클래스를 정의 해제하는 방법은 무엇입니까?

  23. 23

    수업은 무엇입니까? (물음표가있는 클래스) C # 제네릭 형식 제약 조건에서 의미합니까?

  24. 24

    제네릭 유형의 클래스를 다른 클래스의 컬렉션에 사용할 수 있습니까?

  25. 25

    Kotlin에서 제네릭 클래스를 동일한 클래스의 제네릭 배열에 매핑하는 방법

  26. 26

    JAVA의 제네릭 클래스에서 오버라이드 메서드를 사용하는 방법

  27. 27

    C ++에서 제네릭 기본 클래스를 초기화하는 방법

  28. 28

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

  29. 29

    클래스가 아닌 제네릭 유형을 정의하는 방법은 무엇입니까?

뜨겁다태그

보관