मैं another question (थोड़ा संशोधित), मेरे कोड में उपयोग करने के लिए से कोड के नीचे उधार लिया है:ऑपरेटर को स्पष्ट रूप से निर्दिष्ट करना क्यों महत्वपूर्ण है?
internal class PositiveDouble
{
private double _value;
public PositiveDouble(double val)
{
if (val < 0)
throw new ArgumentOutOfRangeException("Value needs to be positive");
_value = val;
}
// This conversion is safe, we can make it implicit
public static implicit operator double(PositiveDouble d)
{
return d._value;
}
// This conversion is not always safe, so we're supposed to make it explicit
public static explicit operator PositiveDouble(double d)
{
return new PositiveDouble(d); // this constructor might throw exception
}
}
इस कोड के मूल लेखक सही ढंग से MSDN के implicit & explicit दस्तावेज में दिए गए चेतावनी का पालन करता है, लेकिन यहाँ है मेरा प्रश्न: explicit
संभावित रूप से असाधारण कोड में हमेशा आवश्यक है?
तो, मैं कुछ प्रकार मेरी कोड में मिल गया है (उदाहरण के लिए "वॉल्यूम") है कि PositiveDouble और मैं नीचे से निकाले जाते हैं पहली पंक्ति की तरह आसानी से उदाहरणों सेट करने में सक्षम होना चाहते हैं:
Volume v = 10; //only allowed by implicit conversion
Volume v = new Volume(10) //required by explicit conversion, but gets messy quick
हर जगह स्पष्ट कास्ट का उपयोग करने के लिए मजबूर होना कोड को बहुत कम पठनीय बनाता है। यह उपयोगकर्ता की सुरक्षा कैसे करता है? मेरे कार्यक्रम के अर्थशास्त्र में, मैं कभी भी वॉल्यूम नकारात्मक होने की अपेक्षा नहीं करता; वास्तव में, यदि यह कभी होता है तो मुझे उम्मीद है कि अपवाद को फेंक दिया जाए। तो अगर मैं एक अंतर्निहित रूपांतरण का उपयोग करता हूं और यह फेंकता है, तो "अप्रत्याशित परिणाम" मुझे क्या रोक सकता है?
मुझे निहित के लिए आपके रूपांतरण ऑपरेटर बदलने के यहाँ ठीक किया जाना चाहिए करने के लिए लगता है। – Botonomous
यह विशेष रूप से एक सार्वजनिक एपीआई में अनुशंसित है। यह लोगों को बिना किसी ध्यान दिए बिना कास्ट का उपयोग करने से रोकता है, डीबगिंग में समय बचा सकता है। लोगों को कास्ट नोटिस करने से परेशानी से बचेंगी। वे कहते हैं "ओह, तो आपको लगता है कि आप चालाक सभी कास्ट अंतर्निहित कर रहे हैं?" और आप कहते हैं कि "क्या आप जानते हैं आप क्या कर रहे हैं, तो आप समस्या नहीं होगी" - एक स्टोव शुरू होता है कि जब कुछ उस पर है की कल्पना है, क्योंकि "स्टोव हर बार बहुत कम कुशल खाना पकाने बनाता है शुरू करने के लिए मजबूर किया जा रहा है", और "इसके बाद चीजों को न डालें" के साथ दावों का जवाब देता है - बस कम नाटकीय और जलाए बिना। – Theraot