2011-04-07 2 views
0

C#에서 사용자 정의 클래스와 함께 in-buit 시스템 유형 (문자열, 목록 등)을 구별 할 수있는 방법이 있습니까?C#에서 사용자 정의 클래스로 in-buit 시스템 유형 차별화

+1

"내장형 시스템 유형"이 의미하는 바를보다 잘 정의해야합니다. System. * 네임 스페이스의 모든 유형을 의미합니까? – Avish

+0

예를 들어 사용자 정의 클래스 Person이있는 경우 모든 "내장 유형"을 검색하는 동안이 클래스를 반환하지 않아야합니다. 이것은 내가 사람의 대상을 가질 때마다 차별화하는 데 도움이 될 것입니다. –

+0

예, 그렇지만 System.Xml.XmlReader를 반환해야합니까? System.Windows.UIElement는 어떻습니까? 사용자 정의 Person 클래스를 만들고 System 네임 스페이스에 넣으면 어떨까요? @ Konrad Rudolph는 "내장형"시스템 유형과 다른 유형을 구분하는 의미있는 구분이 없으므로이 점을 명확하게해야합니다. 어쩌면 당신은 당신이이 구별을 사용할 계획을 설명 할 수 있습니까? 어쩌면 더 간단한 해결책이있을 것입니다. – Avish

답변

2

Type.Assembly을 사용하여 어떤 어셈블리의 출처인지 확인하거나 Type.Namespace을 사용하여 네임 스페이스를 가져올 수 있습니다. 나머지는 "기본 제공"정의에 따라 다릅니다. 예를 들어, 다음과 같이 말할 수 있습니다.

var builtIn = someType.Namespace.StartsWith("System"); 

그러나 원하는 것은 "어려운"정의가 아닙니다.

+0

"System"네임 스페이스에 자신의 타입을 두지 못하게하는 방법은 없습니다. –

+0

@KonradRudolph : 물론입니다. 그러나 네임 스페이스 표준에 유형을 넣는 것과 같습니다. 실제로는 발생하지 않아야합니다. – Jon

+0

차이점은'namespace std'에 무엇이든 두는 것은 사실상 불법입니다 : 컴파일러가 그것을 받아들이는지 여부에 관계없이, 그렇게하는 프로그램은 깨졌습니다. .NET에서는이를 제한하는 엄격한 규칙이 없습니다. –

2

기본 제공 유형과 사용자 지정 유형 간에는 논리적이고 의미있는 차이가 없습니다.

유일한 차이점은 내장형이 mscorlib 어셈블리 또는 다른 프레임 워크 어셈블리 중 하나에 있다는 것입니다. 당신은 그 이상을 확인할 수 있습니다. 그러나, 나는이 정보의 유용성에 의문을 제기 할 것이다.

+0

답변 해 주셔서 감사합니다. NamespaceA.Person과 NamespaceB.Person과 같은 두 개의 서로 다른 객체간에 속성을 자동으로 매핑하려고했습니다. 우리가 볼 수 있듯이 두 속성이 모두 비슷한 기본 유형을 가지고 있으면 쉽게 구현할 수 있습니다. 그러나 NamespaceA.Person에 Employee 유형의 속성이 있고 NamespaceB.Person에 EmployeeId (long 유형) 필드 만 매핑되어있는 경우 함수가 클래스를 발견했으며 클래스를 매핑하면 안된다는 것을 어떻게 이해합니까? long 유형의 속성에 ?? 대신에이 클래스 내에서 long 속성을 검색해야합니다. –

관련 문제