2010-12-22 2 views
4

성능상의 이유로 구조체가 있고 공통점이있는 일부 형식이 있습니다. 나는 그들이 오픈 타입 구조체가되도록 리팩터링 할 수 있는지 알고 싶습니다. 가능한 경우 문제가 발생할 것으로 예상되는 경우를 알고 싶습니다.오픈 타입을 구조체로 사용할 수 있습니까?

+3

처음에는 "개방형 구조체"란 무엇입니까? –

+0

일반을 의미합니까? –

+0

올바른 - 일반 열기 유형. 즉 public class Box 이 public struct Box 일 수 있습니까? – Cort

답변

5

예, 가능합니다. KeyValuePair<TKey, TValue>과 같이 프레임 워크 라이브러리에서 제공하는 제네릭 형식 중 일부는 실제로 structs입니다.

+0

감사합니다. 나는 이것을 깨닫지 못했지만 도움이되었습니다. – Cort

4

업데이트 : 분명히 "개방형"은 "개방형"의 C# 사양 정의와 같은 의미는 아닙니다. "제네릭 유형"을 의미합니다.

예, 구조체는 일반적 일 수 있습니다.

질문의 두 번째 부분에 대답하려면 : 당신이 어떤 종류의 "문제"를 염두에두고 있는지 모른다. 문제가있는 것을 보여주는 예를 들어 주시겠습니까?


원래 대답은, 당신이 실제로 공개 형에 대해 물어되었다고 가정 :

는 C# 사양입니다이 점에 명확하십시오 형식 매개 변수 •

는 오픈 유형을 정의합니다.

• 요소 유형이 열린 유형 인 경우에만 인 경우 배열 유형이 열린 유형입니다.

• 구성된 형식은 형식 인수 중 하나 이상이 공개 형식 인 경우에만 열려있는 형식입니다. 중첩 된 형식으로 구성된 형식 인수 또는 해당 형식을 포함하는 형식 인수 중 하나 이상이 열려 형식 인 경우에만 중첩 된 형식이 생성 된 형식은 입니다.

여기에 있습니다. 구조체 유형은 해당 유형 또는 그 둘러싸는 유형이 유형 인수 중 하나에 대해 열린 유형을 갖는 일반 유형일 경우에만 열린 유형입니다. 예 :

struct S<T> 
{ 
    S<T> s1; // open struct type 
    Nullable<S<T>> s2; // another open struct type 
} 

class O<V> 
{ 
    class C<U> where U : struct 
    { 
    struct R 
    { 
     U u; // open type constrained to be value type 
     R r1; // open struct type; this is O<V>.C<U>.R 
     O<V>.C<S<U>>.R r2; // another open struct type. 
     O<int>.C<S<V>>.R r3; // another open struct type 
    } 
    } 
} 

하루 종일 열린 구조체 유형을 계속 만들 수 있습니다.

+0

정보를 제공해 주셔서 감사합니다. 정말 도움이되었습니다. 내가 요구했던 "문제"는 만약 공개 제네릭 타입에서 구조체를 사용함으로써 제약이 생길 것이라는 제한을 기대해야만하는 경우였다. 이 작업을 수행하는 프레임 워크 유형이있는 것처럼 보였고, 내가 원했던 문제를 해결하기위한 접근 방식이 유사했을 수도 있습니다. – Cort

관련 문제