इस प्रश्न का पालन करें: Why is Nullable<T> considered a struct and not a class?क्या इन लगभग समान वर्गों को एक में जोड़ने का कोई तरीका है?
मेरे पास दो कक्षाएं हैं जो अनिवार्य रूप से किसी आंतरिक ऑब्जेक्ट के साथ कुछ उपयोगकर्ता द्वारा प्रदत्त मान का टुपल बनाए रखती हैं।
जब उपयोगकर्ता द्वारा प्रदत्त मूल्य का प्रकार एक आदिम है, तो मुझे इसे Nullable<T>
में लपेटना होगा ताकि यह टुपल में शून्य मान ले सके।
public class BundledClass<T> where T : class
{
private Tuple<T, object> _bundle;
public T Value
{
get { return _bundle == null ? null : _bundle.Item1; }
set { _bundle = new Tuple<T, object>(value, internalObj); }
}
//...
public class BundledPrimitive<T> where T : struct
{
private Tuple<T?, object> _bundle;
public T? Value
{
get { return _bundle == null ? null : _bundle.Item1; }
set { _bundle = new Tuple<T?, object>(value, internalObj); }
}
//...
मैं इसे पसंद करते हैं, तो मैं एक ही वर्ग है कि एक प्रकार पैरामीटर के रूप में या तो पुरातन या वर्गों ले जा सकते हैं के साथ ऐसा कर सकता है, लेकिन मैं इसे चारों ओर किसी भी तरह से नहीं दिख रहा। कुछ प्रकार के कस्टम Nullable
कक्षा के साथ आने के बिना नहीं, जो कि किसी भी प्रकार के बॉक्स (केवल where T:struct
प्रकार नहीं) को बॉक्स कर सकता है ताकि यह सुनिश्चित किया जा सके कि Value
हमेशा शून्य हो सकता है;
ऐसा लगता है कि मैं कम से कम के रूप में
public class BundledPrimitive<T> : BundledClass<T?> { }
उत्तरार्द्ध वर्ग को परिभाषित करने के लिए सक्षम होना चाहिए लेकिन फिर भी है कि Nullable<T>
के बाद से विफल रहता है : class
बाधा को पूरा नहीं करता (लिंक किए गए सवाल के अनुसार)।
अगर मैं इस वर्ग की एक उपयोगकर्ता हूं, मैं कैसे के बीच अंतर है 'मान' स्थापित किया जा रहा नहीं और मुझे सेट होने मेरे कार्यक्रम में कहीं और शून्य 'मूल्य'? –
@mikez अगर मान कभी सेट नहीं किया गया है, तो आंतरिक '_bundle = null'। यदि 'वैल्यू 'को शून्य पर सेट किया गया था, तो आंतरिक' _ बंडल' 'टुपल (शून्य, आंतरिक ओबीजे) होगा। यह महत्वपूर्ण नहीं है, लेकिन उपयोगकर्ता इसे सार्वजनिक-केवल संपत्ति का उपयोग करके देख सकता है जो '_bundle' लौटाता है। –
Alain
हां यह आंतरिक स्थिति में अंतर होगा, लेकिन एक कॉलर के रूप में मुझे '_bundle' तक पहुंच नहीं है। –