C # 제네릭, 여기서 T 클래스 : (상속 클래스)

블레이크 C

두 가지 유형의 노드가 있는데, 하나는 기본으로 사용되는 MyLinkNode이고 다른 하나는 MyLinkNode를 상속하는 GraphNode입니다.

MyLinkNode로 MyQueue를 만들려고합니다. GraphNode를 MyQueue에 추가 할 때까지 모든 것이 정상입니다. MyQueue가 더 크기 때문에 GraphNode와 함께 사용할 수 없습니다.

또 다른 방법은 GraphNode에 대한 또 다른 대기열을 만드는 것입니다.하지만 더 많은 유형의 노드가있는 경우 많은 클래스를 만들어야합니다. 제안 사항이 있습니까?

public class MyQueue<T> where T : MyLinkNode<T> 
{
    private T Head;
    private T Last;
    public MyQueue(){ ... }
    public void Enqueue(T item)
    {
        item.Prev = Last;
        Last.Next = item;
        Last = item;
    }
}
public class MyGraphQueue
{   
    //everything is the same with MyQueue besides the Node Type
    //I don't want to create like this.
    private GraphNode Head;
    private GraphNode Last;
    public MyGraphQueue(){ ... }
    public void Enqueue(GraphNode item)
    {
        item.Prev = Last;
        Last.Next = item;
        Last = item;
    }
}
public class MyLinkNode<T>
{
    public T data { get; set; }
    public MyLinkNode<T> Next { get; set; }
    public MyLinkNode<T> Prev { get; set; }
}
public class GraphNode<T> : MyLinkNode<T>
{
    public GraphNode()
    {
        this.adjacencyNodes = new List<GraphNode<T>>();
        this.isVisited = false;
    }

    public List<GraphNode<T>> adjacencyNodes;
    public bool isVisited { get; set; }
}
public void BFS<T>(GraphNode<T> v)
{
    MyQueue<GraphNode<T>> queue = new MyQueue<GraphNode<T>>(); // error, can't implicit convert GraphNode to MyLinkNode<T>
    MyGraphQueue queue = new MyGraphQueue(); //It's how I do now.

 }
CCondron

이것은 표준 Generics 상속 문제입니다. 일반 유형에서 큐에 필요한 것을 분리해야합니다. 큐 제약 조건에 다른 기본 클래스를 추가하기 만하면됩니다.

그러면 큐가 유형 T를 갖는 모든 항목을 보장하고 모든 구체적인 유형에 대해 추가 유형이나 다중 클래스 정의가 필요하지 않도록 유지합니다. 에릭 Lippert의 좋은 기사를 가지고 여기에 이러한 제한이 제네릭 시스템에 필요한 이유에.

 public class CallingClass
{
    public void BFS(GraphNode v)
    {
        MyQueue<GraphNode> queue = new MyQueue<GraphNode>(); // error, can't implicit convert GraphNode to MyLinkNode<T>
       // MyGraphQueue queue = new MyGraphQueue(); //It's how I do now.

    }
}
public class QueueItem
{
    public QueueItem Next { get; set; }
    public QueueItem Prev { get; set; }
}

public class MyQueue<T> where T : QueueItem
{
    private T Head;
    private T Last;
    public MyQueue() {  }
    public void Enqueue(T item)
    {
        item.Prev = Last;
        Last.Next = item;
        Last = item;
    }
}

public class MyLinkNode<T>: QueueItem
{
    public T data { get; set; }

}
public class GraphNode : MyLinkNode<string>
{
    public GraphNode()
    {
        this.adjacencyNodes = new List<GraphNode>();
        this.isVisited = false;
    }

    public List<GraphNode> adjacencyNodes;
    public bool isVisited { get; set; }
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

제네릭 클래스의 C # 재정의 기본 클래스 속성

분류에서Dev

추상 클래스 C #에서 중첩 된 제네릭 / 중첩 된 제네릭의 상속

분류에서Dev

제약 조건이있는 C # 상속 제네릭 클래스

분류에서Dev

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

분류에서Dev

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

분류에서Dev

제네릭 및 상속 : 기본 클래스 및 하위 클래스와 함께 제네릭 사용

분류에서Dev

C #에서 상속없이 제네릭 클래스에 대한 구체적인 생성자 만들기

분류에서Dev

제네릭 클래스의 호출 된 메서드와 동일한 T가있는 매개 변수로 C # 제네릭 클래스

분류에서Dev

C #에서 제네릭 클래스 인스턴스화

분류에서Dev

기본 클래스 C #에서 상속

분류에서Dev

제네릭에서 필수 생성자를 사용하여 클래스 상속

분류에서Dev

상속 클래스 문제 (C ++)에서 .txt 파일에 쓰기

분류에서Dev

제네릭 추상 클래스 <T>를 인수로 전달

분류에서Dev

제네릭 속성이있는 C # 클래스

분류에서Dev

typeof (T) 및 this.GetType (). GetGenericArguments () [0]은 제네릭 클래스 인스턴스 내에서 항상 동일합니까?

분류에서Dev

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

분류에서Dev

C ++의 기본 클래스 상속

분류에서Dev

제네릭 메서드에서 클래스 별 속성 처리

분류에서Dev

C ++에서 클래스 상속 반복

분류에서Dev

protobuf에서 C ++ 클래스 상속

분류에서Dev

C ++ 클래스 상속 순서

분류에서Dev

제한된 AppDomain의 C # 클래스는 기본 AppDomain에있는 다른 클래스에서 상속합니다.

분류에서Dev

Neo4jClient에서 C # 제네릭 클래스 사용

분류에서Dev

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

분류에서Dev

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

분류에서Dev

제네릭 클래스에서 Java 제네릭 클래스 인스턴스화

분류에서Dev

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

분류에서Dev

클래스의 상속. C ++

분류에서Dev

클래스 팩토리 메서드를 상속하는 하위 클래스 문제 (Objective-C)

Related 관련 기사

  1. 1

    제네릭 클래스의 C # 재정의 기본 클래스 속성

  2. 2

    추상 클래스 C #에서 중첩 된 제네릭 / 중첩 된 제네릭의 상속

  3. 3

    제약 조건이있는 C # 상속 제네릭 클래스

  4. 4

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

  5. 5

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

  6. 6

    제네릭 및 상속 : 기본 클래스 및 하위 클래스와 함께 제네릭 사용

  7. 7

    C #에서 상속없이 제네릭 클래스에 대한 구체적인 생성자 만들기

  8. 8

    제네릭 클래스의 호출 된 메서드와 동일한 T가있는 매개 변수로 C # 제네릭 클래스

  9. 9

    C #에서 제네릭 클래스 인스턴스화

  10. 10

    기본 클래스 C #에서 상속

  11. 11

    제네릭에서 필수 생성자를 사용하여 클래스 상속

  12. 12

    상속 클래스 문제 (C ++)에서 .txt 파일에 쓰기

  13. 13

    제네릭 추상 클래스 <T>를 인수로 전달

  14. 14

    제네릭 속성이있는 C # 클래스

  15. 15

    typeof (T) 및 this.GetType (). GetGenericArguments () [0]은 제네릭 클래스 인스턴스 내에서 항상 동일합니까?

  16. 16

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

  17. 17

    C ++의 기본 클래스 상속

  18. 18

    제네릭 메서드에서 클래스 별 속성 처리

  19. 19

    C ++에서 클래스 상속 반복

  20. 20

    protobuf에서 C ++ 클래스 상속

  21. 21

    C ++ 클래스 상속 순서

  22. 22

    제한된 AppDomain의 C # 클래스는 기본 AppDomain에있는 다른 클래스에서 상속합니다.

  23. 23

    Neo4jClient에서 C # 제네릭 클래스 사용

  24. 24

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

  25. 25

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

  26. 26

    제네릭 클래스에서 Java 제네릭 클래스 인스턴스화

  27. 27

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

  28. 28

    클래스의 상속. C ++

  29. 29

    클래스 팩토리 메서드를 상속하는 하위 클래스 문제 (Objective-C)

뜨겁다태그

보관