Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में निर्दिष्ट ऑब्जेक्ट के टाइप का RuntimeTypeHandle प्राप्त करना

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

पहलूRuntimeTypeHandleType
आकारछोटा (पॉइंटर-आकार)बड़ा (मेटाडेटा ऑब्जेक्ट)
कार्यक्षमतान्यूनतम (केवल पहचान)पूर्ण रिफ्लेक्शन API
उपयोगइंटरऑप, लो-लेवलसामान्य रिफ्लेक्शन
सीरियलाइज़ेबलहांनहीं (सीधे)

चेतावनी

अधिकांश एप्लिकेशन कोड में RuntimeTypeHandle की आवश्यकता नहीं होती। सामान्य रिफ्लेक्शन के लिए typeof(T) या obj.GetType() उपयोग करें।

  1. - C# में Enum.GetType(): एन्यूमरेशन का प्रकार प्राप्त करना

    GetType() मेथड किसी भी ऑब्जेक्ट का रनटाइम टाइप लौटाता है। एनम मानों पर उपयोग करके उनका एन्यूमरेशन टाइप और अंतर्निहित टाइप जान सकते हैं। उदाहरण using System; public class Demo { public static void Main() { Enum[] values = { ConsoleColor.Blue, DayOfWeek.Sunday }; Co

  1. - C#.NET में सभी डेटा टाइप्स का बेस क्लास (Object)

    परिचय System.Object (एलियास object) .NET में सभी टाइप्स का अल्टीमेट बेस क्लास है। हर टाइप (वैल्यू, रेफरेंस, यूजर-डिफाइन्ड) प्रत्यक्ष या अप्रत्यक्ष रूप से इससे इनहेरिट करता है। मुख्य मेथड्स (Object पर परिभाषित) मेथडविवरण ToString()स्ट्रिंग प्रतिनिधित्व (ओवरराइड करें)। Equals(obj)समानता जांच (ओव

  1. - पायथन पैंडास - दिए गए पीरियड ऑब्जेक्ट के लिए फ्रीक्वेंसी प्राप्त करें

    दिए गए पीरियड ऑब्जेक्ट के लिए फ्रीक्वेंसी प्राप्त करने के लिए, period.freq प्रॉपर्टी का उपयोग करें। सबसे पहले, आवश्यक लाइब्रेरी इंपोर्ट करें: import pandas as pd pandas.Period समय की अवधि को दर्शाता है। दो पीरियड ऑब्जेक्ट बनाएं: period1 = pd.Period(2020-09-23 03:55:20) period2 = pd.Period(freq=T, y