programing

C #에서 System.Type과 System.RuntimeType의 차이점은 무엇입니까?

nasanasas 2020. 10. 17. 10:36
반응형

C #에서 System.Type과 System.RuntimeType의 차이점은 무엇입니까?


나는 오늘 몇 가지 규칙 테스트를 시도하고 있었고 (를 호출하여) 어셈블리의 모든 유형을 얻었 Assembly.GetTypes()습니다.

System.RuntimeType:[First.Namespace.FirstClass]

이 유형을와 비교할 때마다 typeof(FirstClass)같지 않습니다. 따라서 FirstClass제네릭 매개 변수로 포함 된 모든 유형을 찾으려고하면 아무것도 찾지 못합니다.

System.RuntimeType의 차이점은 무엇입니까 System.Type?

내 문제를 해결할 방법이 있습니까?


System.RuntimeType추상 기본 클래스에서 파생 된 구체적인 클래스입니다 System.Type. System.RuntimeType공개되지 않기 때문에 일반적으로 System.Type.

객체의 유형을 가져 오려고 할 때 GetType()해당 객체를 직접 사용하지 않고 첫 번째 객체의 유형을 나타내는 다른 객체를 실수로 호출 할 때 혼동이 발생할 수 있습니다 . 그런 다음 호출 된 객체가 유형을 나타낼 때 Type.ToString()반환 "System.RuntimeType"됩니다.

string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();     // returns "System.string"
strTypeType.ToString(); // returns "System.RuntimeType"

예를 들어, 이 블로그 게시물에서 누군가는 다음과 같이 데이터베이스의 열 유형을 가져 오려고합니다.

object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);

val은 이미 Type 객체이므로 val.GetType ()은 System.RuntimeTime원래 유형 객체를 나타내는 데 사용되는 구체적인 유형이므로 유형 나타내는 다른 Type 객체를 반환 합니다. 그런 다음 블로그 게시물은 필요한 모든 것이 실제로 필요한 경우 원본 유형 객체의 유형을 얻기 위해 불필요한 반사 속임수를 보여줍니다.

Type type = reader.GetFieldType(index) as Type;

따라서 Type객체가를 나타낸다고보고하는 경우 이미 가지고있는 유형을 System.RuntimeType실수로 호출하지 않았는지 확인하십시오 GetType().


에 대한 대답에서 System.Type과 System.RuntimeType 사이에 다른 에 의해 토마스 Danecker :

System.Type은 추상 기본 클래스입니다. CLR에는 내부 형식 System.RuntimeType에 구체적인 구현이 있습니다. 이 때문에 typeof (string) .GetType ()은 RuntimeType을 반환하지만 typeof (Type)은 일반 Type을 반환합니다. .Equals 메서드를 사용하면 실제로 false를 반환하는 object.ReferenceEquals가 수행됩니다. 예상 결과를 얻으려면 type.IsInstanceOfType (element)를 사용할 수 있습니다. 요소가 파생 된 유형 인 경우에도 true를 반환합니다. 정확한 유형을 확인하려면 메서드의 반환 값이 false이면 원하는 결과가됩니다. 또한 checkType (arrayType, Type.GetType ( "System.RuntimeType"))을 사용하여 RuntimeType을 확인할 수도 있습니다.


간단히 말해서 ...

    "".GetType().ToString()           == "System.String"

    "".GetType().GetType().ToString() == "System.RuntimeType"

내가 지금 생각하는 방식 System.Type은 런타임에 객체 유형 요청 결과를 나타내는 유형, 즉 System.RuntimeType. 따라서에서와 같이 객체 유형을 요청할 때 반환 "".GetType()되는 인스턴스는 System.Type하위 항목 인 System.RuntimeType. 사실,이 역시 있어야한다고 예상 typeof(System.Type).GetType()해야 System.RuntimeType하지만, 프레임 워크가 특별히 이것을 방지한다고 생각합니다.


이 블로그를 살펴보면 그 사람이 차이점에 대해 이야기합니다. 나에게 이러한 클래스는 .NET 최적화의 결과라고 생각합니다.

http://blogs.msdn.com/b/vancem/archive/2006/10/01/779503.aspx

참고 URL : https://stackoverflow.com/questions/5737840/whats-the-difference-between-system-type-and-system-runtimetype-in-c

반응형