यह संभव नहीं है, लेकिन मेरे पास यह वर्ग है:
public class Metadata<DataType> where DataType : struct
{
private DataType mDataType;
}
इसके लिए और भी बहुत कुछ है, लेकिन चलो इसे सरल रखें। जेनेरिक प्रकार (DataType) जहां कथन द्वारा मान प्रकारों तक सीमित है। जो मैं करना चाहता हूं, वह इन मेटाडेटा ऑब्जेक्ट्स की अलग-अलग प्रकारों (डेटा टाइप) की एक सूची है। जैसे कि:
List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
क्या यह भी संभव है?
एब्सट्रैक्ट बेस क्लास और इंटरफ़ेस दोनों ही प्रकार के तत्वों को प्रतिबंधित करके नियंत्रण की एक डिग्री प्रदान करते हैं जिन्हें सूची में जोड़ा जा सकता है। मैं यह भी नहीं देख सकता कि इसमें मुक्केबाजी कैसे आती है।
—
0b101010
बेशक, यदि आप .NET v4.0 या उच्चतर का उपयोग कर रहे हैं, तो सहसंयोजक समाधान है।
—
0b101010
List<Metadata<object>>
उसने चाल चली।
@ 0b101010, दोनों ही संदर्भ प्रकारों को प्रतिबंधित करते हैं, किसी भी निर्मित मूल्य प्रकार और किसी भी संरचना को अभी भी जोड़ा जा सकता है। इसके अलावा, अंत में, आपके पास
—
साहिब अमीनि
MetaData
प्रत्येक मूल तत्व प्रकार के बारे में जानकारी (संकलित समय) के साथ अपने मूल मूल्य प्रकारों के बजाय संदर्भ प्रकारों की एक सूची है , जो प्रभावी रूप से "बॉक्सिंग" है।
List<object>
? वे मुक्केबाजी / अनबॉक्सिंग को नहीं रोकेंगे, वे कास्टिंग की आवश्यकता को दूर नहीं करेंगे, और अंततः, आपको एक ऐसीMetadata
वस्तु मिल रही है जो आपको वास्तविक के बारे में कुछ भी नहीं बताती हैDataType
, मैं उन मुद्दों को हल करने के लिए एक समाधान खोज रहा था। यदि आप एक इंटरफ़ेस / वर्ग की घोषणा करने जा रहे हैं, तो बस एक सामान्य सूची में लागू / व्युत्पन्न सामान्य प्रकार को लागू करने में सक्षम होने के लिए, बस एक निरर्थक परत होने के अलावा अन्य का उपयोग करने की तुलना में कितना अलग हैList<object>
?