2012-02-01 6 views
5

나는 다음과 같은 클래스 이름 서명을 만들려고 오전 :클래스 제약 조건은 다른 제약 앞에 와야합니다

public class MyClass<T> where T : struct, MyBase 

나는 오류

을 얻고있다

(나는 열거 형으로 제한하는 구조체를 사용하고 있습니다)

The class type constraint 'MyBase' must come before any other constraints 

그러나 나는 그 또는 다른 구문 오류를 지나칠 수없는 코드를 재 배열한다는 메시지를 이해합니다. 어떻게하면 그 행을 수정할 수 있습니까?

내가해야한다면, struct을 삭제합니다.

당신은 <T> 두 개의 서로 다른 타입을 정의하고

+0

다른 옵션을 사용해 주셔서 감사합니다. –

+1

나쁜 소식은 느리게 진행되므로 형식 인수를 System.Enum으로 제한 할 수 없습니다. 히스토리는 열거 형에 적합하지 않았으며 구현 유형에 따라 크기가 다르기 때문에 구조적으로 호환되지 않습니다. 하나의 최적화가 너무 많은 C 언어로 interop 때문에 C#에 붙어 있습니다. –

답변

7

class MyClass<T> : MyBase where T : struct을 찾으셨습니까?

+1

감사합니다. 이와 비슷한 것을 시도했을 때 나는 쉼표를 붙이고 있었다.','. "빛은 초록색, 함정은 깨끗합니다." –

1

주셔서 감사합니다. struct은 값 유형으로 MyBase은 참조 유형을 참조하는 클래스입니다. 그것은 상호 교환 할 수있는 것이 아닙니다.

은이 경우에는이 될 것이다 :

public class MyClass<T> where T : struct

또는

public class MyClass<T> where T : MyBase

Here 제네릭과 사용 방법에 대한 너무 자세한 내용입니다.

0

Tstruct이어야하며 다른 유형에서는 상속받을 수 없습니다 ... 값 유형은 상속을 지원하지 않습니다.

16

제약 조건은 함께 "and-ed"입니다. 모두 제약 조건을 충족해야합니다.

은 무엇에 따라 상황이 T 모두 수 있습니다 nullable이 아닌 값 형식정체성, 권투 또는 참조 변환를 통해 클래스 MyBase에 암시 적으로 변환 할 수?

그런 상황이 없으므로 T의 제약 조건을 충족시킬 수있는 유형 인수가 없습니다. 컴파일러는 충족시킬 수없는 제약 조건 세트를 정의하는 대신 컴파일러가이를 허용하지 않도록합니다. struct 제약 조건과 class type 제약 조건이 모두 필요하다고 명시 할 수 없습니다. 내 지점을 보여

을 열거하는 제한하는 구조체를 사용하고

. MyBase에서 상속 한 열거 형이 없기 때문에 제약 조건을 충족시킬 수 없습니다.

내가 생각하기에이게 무슨 뜻일까요? 예를 들어, "null이 아닌 값 유형 또는은 MyBase로 변환 할 수있는 모든 유형"을 의미한다고 생각 했습니까? 나는 사람들이 왜 C#에 관한 거짓된 것들을 믿는 지 알기를 원합니다. 그래서 그것을 개선하려고 노력할 수 있습니다.

업데이트 : 아, 알겠습니다. MyBase는 T의 기본 클래스가 아닌 MyClass<T>의 기본 클래스로 사용됩니다. C#에서, 그것은 간다 :

class [class name] < [generic type parameters] > 
    : [base classes and interfaces] 
    where [type parameter] : [constraints] 

당신은 제약 전에 기본 클래스와 인터페이스 을 넣어 가지고, 그렇지 않으면 컴파일러가 제약이 있다고 생각한다.

0

100 %이에 확실하지만, MSDN의 빠른 확인이 where (generic type constraint) (C# Reference)와 함께 제공 :

public class MyClass<T, U> where T : MyBase where U : struct 

그건 당신이 비록 무엇을 찾고 있는지 확실하지 않습니다.

+1

두 개의 별개의 paraterized 형식이 필요하지만 다른 형식과 독립적 인 형식이 필요한 경우이 방법이 유효합니다. 그러나 현재로서는 그러한 표시가 없습니다. 단일 유형 매개 변수에 대한 제약 조건에 대한 경쟁 욕구가있는 것처럼 보입니다. –

+0

@AnthonyPegram - 유효한 질문입니다, 비록 제가이 질문을 다르게 읽었습니다. OP가 무엇을 성취하려고하는지 완전히 명확하지 않습니다. 그래서 나는주의해야합니다. – Tim

관련 문제