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

C# में अनाम क्लास में इंटरफ़ेस कैसे इम्प्लीमेंट करें?

संक्षिप्त उत्तर: अनाम टाइप्स (anonymous types) इंटरफ़ेस इम्प्लीमेंट नहीं कर सकते। आपको अपना खुद का टाइप (क्लास/स्ट्रक्ट) बनाना होगा।

अनाम टाइप्स क्या हैं?

अनाम टाइप्स रीड-ओनली प्रॉपर्टीज़ के सेट को एक ऑब्जेक्ट में एनकैप्सुलेट करने का सुविधाजनक तरीका प्रदान करते हैं, बिना पहले से टाइप डिफाइन किए।

  • टाइप नाम कंपाइलर द्वारा जनरेट होता है (सोर्स कोड लेवल पर उपलब्ध नहीं)
  • प्रत्येक प्रॉपर्टी का टाइप कंपाइलर द्वारा इन्फर किया जाता है
  • new ऑपरेटर और ऑब्जेक्ट इनिशियलाइज़र के साथ बनाए जाते हैं
  • केवल लोकल स्कोप में उपयोगी

उदाहरण: अनाम टाइप बनाना

class Program {
    public static void Main() {
        var v = new { Amount = 108, Message = "Test" };
        Console.WriteLine(v.Amount + v.Message);  // 108Test
        Console.ReadLine();
    }
}

आउटपुट

108Test

अनाम टाइप्स की सीमाएँ

  • इंटरफ़ेस इम्प्लीमेंट नहीं कर सकते
  • बेस क्लास निर्दिष्ट नहीं कर सकते (object के अलावा)
  • मेथड्स, इवेंट्स, ऑपरेटर्स नहीं हो सकते
  • केवल पब्लिक रीड-ओनली प्रॉपर्टीज़
  • मेथड बाउंड्री पार नहीं कर सकते (object के रूप में पास करना पड़ता है)
  • फील्ड्स नहीं हो सकते

विकल्प: इंटरफ़ेस इम्प्लीमेंट करने के लिए

विकल्प 1: नामित क्लास/स्ट्रक्ट

public interface IMessage {
    int Amount { get; }
    string Message { get; }
}

public class MessageDto : IMessage {
    public int Amount { get; set; }
    public string Message { get; set; }
}

// उपयोग
IMessage msg = new MessageDto { Amount = 108, Message = "Test" };

विकल्प 2: रिकॉर्ड टाइप (C# 9.0+)

public record MessageRecord(int Amount, string Message) : IMessage;

विकल्प 3: डायनामिक ऑब्जेक्ट (ExpandoObject)

dynamic obj = new ExpandoObject();
obj.Amount = 108;
obj.Message = "Test";
// लेकिन यह इंटरफ़ेस इम्प्लीमेंट नहीं करता

विकल्प 4: फैक्टरी मेथड के साथ कंक्रीट टाइप

public static class MessageFactory {
    public static IMessage Create(int amount, string message) {
        return new MessageImpl(amount, message);
    }
    
    private class MessageImpl : IMessage {
        public int Amount { get; }
        public string Message { get; }
        
        public MessageImpl(int amount, string message) {
            Amount = amount;
            Message = message;
        }
    }
}

सारांश

यदि आपको इंटरफ़ेस इम्प्लीमेंट करने की आवश्यकता है, तो नामित टाइप (क्लास, स्ट्रक्ट, या रिकॉर्ड) का उपयोग करें। अनाम टाइप्स केवल अस्थायी, लोकल डेटा ट्रांसफर के लिए उपयुक्त हैं।

  1. - Java में एनोनिमस इनर क्लास का उपयोग करके इंटरफेस कैसे इम्प्लीमेंट करें?

    एक एनोनिमस इनर क्लास एक ऐसी क्लास है जिसका कोई नाम नहीं होता, हम इसे सीधे इंस्टेंशिएशन लाइन पर परिभाषित करते हैं। उदाहरण निम्न प्रोग्राम में, हम TutorialsPoint इंटरफेस के toString() मेथड को एनोनिमस इनर क्लास का उपयोग करके इम्प्लीमेंट कर रहे हैं, और इसके रिटर्न मान को प्रिंट कर रहे हैं। interface

  1. - Java में इंटरफेस (Interface)

    एक इंटरफेस Java में एक रेफरेंस टाइप है। यह एक क्लास के समान है। यह एब्स्ट्रैक्ट मेथड्स का एक संग्रह है। एक क्लास इंटरफेस को इम्प्लीमेंट करती है, जिससे इंटरफेस के एब्स्ट्रैक्ट मेथड्स विरासत में मिलते हैं। एब्स्ट्रैक्ट मेथड्स के साथ, एक इंटरफेस में कॉन्स्टेंट्स, डिफ़ॉल्ट मेथड्स, स्टेटिक मेथड्स, और न

  1. - पायथन में यूजर डिफाइंड एक्सेप्शन कैसे इम्प्लीमेंट करें?

    हम पायथन में एक नई एक्सेप्शन क्लास बनाकर यूजर-डिफाइंड या कस्टम एक्सेप्शन बनाते हैं। विचार कस्टम एक्सेप्शन क्लास को एक्सेप्शन क्लास से प्राप्त करना है। अधिकांश बिल्ट-इन एक्सेप्शन अपने एक्सेप्शन को लागू करने के लिए उसी विचार का उपयोग करते हैं। दिए गए कोड में, आपने एक यूजर-डिफाइंड एक्सेप्शन क्लास बनाई