मैं आदिम .NET मान प्रकारों को अधिक 0 -एस में लपेटकर आदिम .NET मान प्रकारों को अधिक प्रकार-सुरक्षित और अधिक "स्वयं-दस्तावेज़" बनाने के विचार से टकरा रहा हूं। हालांकि, मैं सोच रहा हूं कि वास्तव में वास्तविक दुनिया सॉफ्टवेयर में प्रयास के लायक है या नहीं।कस्टम-स्ट्रक्चर के माध्यम से टाइप-प्रूफिंग आदिम .NET मान प्रकार: क्या यह प्रयास के लायक है?
(यही कारण है कि "प्रयास" नीचे देखा जा सकता है:। एक ही कोड पैटर्न फिर से और फिर लागू करने के लिए होने हम
struct
रों घोषणा कर रहे हैं और इसलिए विरासत उपयोग नहीं कर सकते कोड पुनरावृत्ति दूर करने के लिए, और अतिभारित ऑपरेटरों के बाद सेstatic
घोषित किया जाना चाहिए, वे अलग से प्रत्येक प्रकार के लिए परिभाषित किया जाना है)
इस (वैसे तुच्छ) उदाहरण लें:।
struct Area
{
public static implicit operator Area(double x) { return new Area(x); }
public static implicit operator double(Area area) { return area.x; }
private Area(double x) { this.x = x; }
private readonly double x;
}
struct Length
{
public static implicit operator Length(double x) { return new Length(x); }
public static implicit operator double(Length length) { return length.x; }
private Length(double x) { this.x = x; }
private readonly double x;
}
Area
और Length
दोनों मूल रूप से double
हैं, लेकिन इसे एक विशिष्ट अर्थ के साथ बढ़ाएं। यदि आपने एक विधि परिभाषित की है जैसे & hellip;
Area CalculateAreaOfRectangleWith(Length width, Length height)
है & hellip; यह सीधे दुर्घटना से एक Area
में पारित करने के लिए संभव नहीं होगा। अब तक सब ठीक है।
लेकिन: आप आसानी से एक Area
double
के लिए, या अस्थायी रूप से एक double
चर में एक Area
भंडारण, और फिर विधि जहां एक Length
की उम्मीद है में से गुजर रहा है कि द्वारा कास्टिंग द्वारा इस जाहिरा तौर पर सुधार प्रकार सुरक्षा बस से बचने कर सकते हैं:
Area a = 10.0;
double aWithEvilPowers = a;
… = CalculateAreaOfRectangleWith((double)a, aWithEvilPowers);
प्रश्न: यहाँ किसी को भी इस तरह के कस्टम वास्तविक दुनिया में struct
प्रकार/उत्पादन सॉफ्टवेयर के व्यापक उपयोग के साथ अनुभव है? यदि ऐसा है तो:
कस्टम
struct
रों में आदिम मूल्य प्रकार के रैपिंग कभी सीधे कम कीड़े में बदल गया है, या अधिक maintainable कोड में, या किसी अन्य प्रमुख लाभ (रों) दिए गए?या कस्टम
struct
एस के फायदे अभ्यास में उपयोग किए जाने के लिए बहुत छोटे हैं?
पी.एस .: बारे में 5 साल बीत चुके हैं मैं इस सवाल पूछा था। मैं some of my experiences that I've made since then को एक अलग उत्तर के रूप में पोस्ट कर रहा हूं।
** पीएस: ** मुझे पता है कि कोई 'अंतर्निहित' के बजाय 'क्षेत्र -> डबल' कास्ट ऑपरेटर 'स्पष्ट' को परिभाषित करके दो वर्णित सिडस्टेपिंग तकनीकों में से एक से छुटकारा पाने में सक्षम हो सकता है। – stakx
मैं शायद काफी बड़ा नहीं सोच रहा हूं, लेकिन क्या आपने पाया है कि इस तरह की त्रुटि आपके लिए अक्सर आती है? यही है - एक बार जब आपके पास बाहरी स्रोत (संभवतः अनियमित) और आपके प्रोग्राम में आपका डेटा हो, तो यह किसी प्रकार की संरचना में होगा जहां इसे किसी नाम से एक्सेस किया जाता है जो "object.length" जैसा समझ में आता है। आप आमतौर पर कच्चे नंबरों के चारों ओर गुजरने के अंत में नहीं होते हैं, बल्कि आप संरचनाओं के चारों ओर गुजरते हैं। मुझे लगता है कि इस तरह की त्रुटि दुर्लभ है, मैं नहीं सोच सकता कि यह मेरे लिए आ रहा है। –
मुझे संदेह है कि इस प्रकार की त्रुटि मेरे लिए अक्सर नहीं होती है, @ jamietre, लेकिन मुझे उस धारणा का समर्थन करने या अस्वीकार करने के लिए कोई कठोर आंकड़ा नहीं मिला है। हालांकि, अन्य संभावित लाभ भी हैं; आसानी से समझने वाला कोड उनमें से एक हो सकता है। मैं बस इतना स्पष्ट नहीं हूं कि अगर बहुत सारे समान 'संरचना' प्रकारों को लागू करने के लिए उचित ठहरता है ... – stakx