2014-03-31 2 views
2

형식 인수가 참조 형식이므로 3 가지 클래스 중 하나만 사용할 수 있으므로 제약 조건이 있습니다. "L : class"는 다음과 같습니다. 안 좋아.형식 매개 변수에 대한 제약 조건 - 여기서 T : class

public class MyClass <L> 
     where L : Circle 
     where L: Rectangle 
     where L: Triangle 

이 평균 모든 제약 조건을 준수해야합니다 : 여기

은 예입니다. 불행히도 아직 답변을 찾지 못했습니다.

대단히 감사합니다.

+1

그 3 개 클래스를 수행을 ('Circle'는'Rectangle'는'Triangle')는 공통 조상을 공유? – dcastro

+0

클래스가 * 모든 * 제약 조건 대신 준수하도록 하시겠습니까? 다시 말해서 클래스가 세 개의 'Circle','Rectangle'과'Triangle' 모두에서 파생되기를 원합니까? – hvd

+0

설명하는 것은 공용체 유형이며 C#은이를 지원하지 않으며 OO는 실제로 닫힌 계층 구조를 제공하지 않습니다. 대신 F #을 사용하거나 모든 코드를 제어하는 ​​경우 기본 클래스/인터페이스를 정의하고 'Circle','Rectangle' 및 'Triangle'의 세 가지 확장 유형을 추가 할 수 있습니다. – Lee

답변

6

Circle, RectangleTriangle이 상속하는 기본 클래스 또는 인터페이스를 만들어야합니다.

interface IShape 
{ 
} 

class Circle : IShape 
{ 
    // ... 
} 

class Rectangle : IShape 
{ 
    // ... 
} 

class Triangle : IShape 
{ 
    // ... 
} 

그런 다음 IShape에 제약을 수행합니다 : 예를 들어

public class MyClass <L> 
    where L : IShape 
+1

이것에 추가 할 수 있습니다 :'Circle','Rectangle' 및/또는'Triangle'에 대한 소스에 접근 할 수없는 경우, 당신이 파생 된 타입에서 인터페이스를 구현할 수 있습니다. 봉인 된 –

+0

아마 그 세 가지 모양은 좌표 또는 색상과 같은 공통 코드를 공유합니다. 이러한 일반적인 것들은 추상 기본 클래스에 확실히 속합니다. 이 기본 클래스는 여전히 인터페이스를 구현할 수 있습니다. –

관련 문제