2011-05-01 6 views
3

나는이 사이트의 스레드 중 하나만 읽고 있었고 나는 그 것을 잘 이해할 수없는 비정상적인 클래스 정의를 보았습니다. 누군가이 정의가 무엇을 의미하는지 설명해 주시겠습니까?일부 C# 코드 이해하기

public class Node<T> where T : class 
{  
    public Node<T> Next { get; set; }  
    public T Value { get; set; }  
    public Node(T value)  
    { 
    Next = null; 
    Value = value;  
    } 
} 

특히 그것은 T 클래스 (참조 형식)이어야 제약과 제네릭 매개 변수 T와 일반 클래스 정의의

public class Node<T> where T : class 
+0

[일반 형식 제약] (http://msdn.microsoft.com/en-us/library/d5x73970.aspx) – ChaosPandion

+0

가능한 중복 [C# where where] (http : // stackoverflow.com/questions/2774041/c-where-keyword) – ChaosPandion

답변

6

을 말한다 곳.

그것은 본질적으로 당신이 노드의 인스턴스를 만들 때, 당신은

new Node<String>(someStringVar) 

을 할 수 있지만

new Node<int>(someIntVar) 
+0

도움 주셔서 감사합니다. – TeaLeave

0

T는 제네릭 형식 인수 인 할 수없는 것을 의미한다. 정의는 제약 조건을 지정하는 것이며 T은 이 아니라 class 일 수 있습니다.

3

where T : class은 T가 struct 유형 (int과 같은 기본 유형 포함) 일 수 없음을 의미합니다.

1

노드가 어떤 클래스가 될 수있는 링크 된 목록 노드가있는 것처럼 보입니다. T는 generic에 대한 지정자이며 여기서 T : class 부분은 generic에 대한 조건을 지정합니다. 이 경우 T는 클래스 여야합니다.

1

이가 호출 제네릭

where T : class 

는 공급 유형, 당신은 기본 형식을 사용할 수 없습니다 클래스를해야한다는 것을 의미한다. (예 : < int>)

이것은 Node<T> 유형의 Next이라는 개체를 정의합니다. 이 클래스의 인스턴스를 만들 때 유형 Size이 제공되면이 속성은 Node<Size>이됩니다.

public Node<T> Next { get; set; } 

그리고이 :

public T Value { get; set; } 

는 괄호 안의

public Size Value { get; set; } 

See generics on MSDN

+0

고맙습니다. – TeaLeave

+0

@Californicated up 투표의 행위는 이미'thanks'를 의미합니다. P 그리고 질문에 대한 대답을 수락하십시오. 투표 옵션 아래에서 확인 ('√')을하십시오. – BrunoLM

1

T 같은 있을까는 제네릭 형식 매개 변수입니다. 그 이점과 필요성에 대한 설명은 the introduction on genericity을 읽어 보시기 바랍니다.

+0

aticle가 정말 도움이되어 정말 고마워. :). – TeaLeave