सुविधा?
अधिक या कम, हाँ। इस मामले पर विचार करें कि जब आपके पास संख्या-जैसी वस्तु है (कहें, Complex
) जिस पर आप गणना करते हैं। जाहिर है, कोड लिखना जैसे:
Complex result = c1 * new Complex(2) + new Complex(32);
बहुत परेशान और पढ़ने में मुश्किल है। लागू रूपांतरण यहां सहायता करते हैं (एक विकल्प इस उदाहरण में ऑपरेटर ओवरलोड होगा, लेकिन इससे बहुत सारे अधिभार होंगे)।
क्या इसके लिए कोई दिशानिर्देश है?
बाद से वे समस्याओं छिपा सकते हैं, संभव के रूप में कुछ निहित रूपांतरण प्रदान करें। लागू रूपांतरण उसी राशि से स्पष्टीकरण को कम करता है जिसके द्वारा वे दृढ़ता बढ़ाते हैं। कभी-कभी यह अच्छा होता है, लेकिन कभी-कभी नहीं।
मैं यह सबसे अच्छा ऐसी मेरी उदाहरण में संख्या की तरह वस्तुओं से ऊपर के रूप में बहुत समान प्रकार, के लिए अंतर्निहित रूपांतरण प्रतिबंधित करने के लिए लगता है: एक int
अनिवार्य है-एक Complex
(एक गणितीय दृष्टि से, भले ही यह द्वारा मॉडल नहीं कर रहा है विरासत), इसलिए एक अंतर्निहित रूपांतरण समझ में आता है।
वीबी में, एक अंतर्निहित रूपांतरण "Widening
" कहा जाता है (जैसा कि Narrowing
, जो explicit
है के खिलाफ) हैं और इस यह अच्छी तरह से वर्णन करता है: कोई जानकारी नहीं रूपांतरण के दौरान खो दिया है।
इसके अलावा, एक ऑपरेटर अनिवार्य रूप से एक बिल्डर फ़ंक्शन है, और इसमें (कुछ) एक निर्माता पर एक निर्माता फ़ंक्शन के सामान्य फायदे हैं: अर्थात्, यह हमेशा नए उदाहरण बनाने के बजाय कैश किए गए मानों का पुन: उपयोग कर सकता है।
मेरे Complex
उदाहरण पर विचार करें। हम अक्सर इस्तेमाल परिसर संख्या के लिए मूल्यों को कैश करने के लिए कर सकते हैं:
Class Complex {
// Rest of implementation.
private static Complex[] cache = new[] {
new Complex(-1), new Complex(0), new Complex(1) };
public implicit operator Complex(int value) {
if (value >= -1 && value <= 1)
return cache[value];
else
return new Complex(value);
}
}
बेशक
, कि क्या यह सूक्ष्म अनुकूलन प्रभावी है एक और सवाल है।
धन्यवाद, आप ऑपरेटर ओवरलोड के लिए ऐसा कैसे करेंगे जो जटिल प्रकार की मदद करेगा? आपको int प्रकार को संपादित करने में सक्षम होना चाहिए, है ना? –
@ जोन: नहीं, चूंकि आप दोनों दिशाओं में ऑपरेटर को कार्यान्वित कर सकते हैं: * * अपने कस्टम प्रकार और * से * अपने कस्टम प्रकार से। मेरे उदाहरण में, बस 'कॉम्प्लेक्स' ऑपरेटर 'निहित ऑपरेटर कॉम्प्लेक्स (इंट वैल्यू) लागू करें। –
धन्यवाद मैं इसे अभी प्राप्त करता हूं। –