Type.GetTypeHandle() स्टैटिक मेथड निर्दिष्ट टाइप के लिए RuntimeTypeHandle लौटाता है। यह हैंडल रनटाइम द्वारा टाइप की पहचान के लिए उपयोग किया जाने वाला आंतरिक अपारदर्शी मान है। Type.GetTypeFromHandle() से टाइप पुनः प्राप्त किया जा सकता है।
उदाहरण 1: System.Type का RuntimeTypeHandle
using System;
public class Demo {
public static void Main() {
// Type टाइप का टाइप प्राप्त करें (System.Type)
Type type1 = typeof(Type);
// RuntimeTypeHandle प्राप्त करें
RuntimeTypeHandle handle = Type.GetTypeHandle(type1);
// हैंडल से टाइप पुनः प्राप्त करें
Type type = Type.GetTypeFromHandle(handle);
Console.WriteLine("एट्रिब्यूट्स = " + type.Attributes);
Console.WriteLine("संदर्भित टाइप = " + type);
}
}
आउटपुट
एट्रिब्यूट्स = AutoLayout, AnsiClass, Class, Serializable, BeforeFieldInit
संदर्भित टाइप = System.RuntimeType
उदाहरण 2: डबल टाइप का RuntimeTypeHandle
using System;
public class Demo {
public static void Main() {
Type type1 = typeof(double);
RuntimeTypeHandle handle = Type.GetTypeHandle(type1);
Type type = Type.GetTypeFromHandle(handle);
Console.WriteLine("एट्रिब्यूट्स = " + type.Attributes);
Console.WriteLine("संदर्भित टाइप = " + type);
}
}
आउटपुट
एट्रिब्यूट्स = AutoLayout, AnsiClass, Class, Serializable, BeforeFieldInit
संदर्भित टाइप = System.RuntimeType
RuntimeTypeHandle मुख्य बिंदु
- अपारदर्शी हैंडल: रनटाइम आंतरिक प्रतिनिधित्व; सीधे निरीक्षण योग्य नहीं।
- इंटरऑप उपयोग: अनमैनेज्ड कोड (P/Invoke, COM) के साथ टाइप जानकारी पास करने के लिए।
- सीरियलाइज़ेशन: टाइप पहचान के लिए कॉम्पैक्ट प्रतिनिधित्व।
- प्रदर्शन: कुछ परिदृश्यों में
typeof()याGetType()से तेज़। - समानता: समान टाइप के लिए समान हैंडल;
Equalsऔर==ओवरलोडेड।
सामान्य उपयोग पैटर्न
// टाइप से हैंडल
RuntimeTypeHandle handle = typeof(MyClass).TypeHandle;
// हैंडल से टाइप
Type type = Type.GetTypeFromHandle(handle);
// जांचें कि दो हैंडल समान टाइप दर्शाते हैं
bool same = handle1.Equals(handle2); // या handle1 == handle2
// टाइप एट्रिब्यूट्स जांचें
TypeAttributes attrs = type.Attributes;
bool isClass = (attrs & TypeAttributes.Class) != 0;
bool isPublic = (attrs & TypeAttributes.Public) != 0;
bool isAbstract = (attrs & TypeAttributes.Abstract) != 0;
TypeHandle बनाम Type
| पहलू | RuntimeTypeHandle | Type |
|---|---|---|
| आकार | छोटा (पॉइंटर-आकार) | बड़ा (मेटाडेटा ऑब्जेक्ट) |
| कार्यक्षमता | न्यूनतम (केवल पहचान) | पूर्ण रिफ्लेक्शन API |
| उपयोग | इंटरऑप, लो-लेवल | सामान्य रिफ्लेक्शन |
| सीरियलाइज़ेबल | हां | नहीं (सीधे) |
चेतावनी
अधिकांश एप्लिकेशन कोड में RuntimeTypeHandle की आवश्यकता नहीं होती। सामान्य रिफ्लेक्शन के लिए typeof(T) या obj.GetType() उपयोग करें।