संक्षिप्त उत्तर: अनाम टाइप्स (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;
}
}
}
सारांश
यदि आपको इंटरफ़ेस इम्प्लीमेंट करने की आवश्यकता है, तो नामित टाइप (क्लास, स्ट्रक्ट, या रिकॉर्ड) का उपयोग करें। अनाम टाइप्स केवल अस्थायी, लोकल डेटा ट्रांसफर के लिए उपयुक्त हैं।