जवाबों:
यह एक रूपांतरण ऑपरेटर है । इसका मतलब है कि आप इस कोड को लिख सकते हैं:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
और कंपाइलर शिकायत नहीं करेगा! रनटाइम के दौरान, रूपांतरण ऑपरेटर को निष्पादित किया जाएगा - myBase
तर्क के रूप में पास करना , और XElement
परिणाम के रूप में एक वैध लौटना ।
संकलक को बताने के लिए डेवलपर के रूप में यह आपके लिए एक तरीका है:
"भले ही ये दो पूरी तरह से असंबंधित प्रकार के दिखते हैं, वास्तव में एक से दूसरे में बदलने का एक तरीका है; बस मुझे यह करने के लिए तर्क को संभालने की अनुमति दें।"
इस तरह के एक अंतर्निहित ऑपरेटर साधन आप परिवर्तित कर सकते हैं XmlBase
करने के लिए XElement
परोक्ष।
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
प्रश्न में यह कहता है कि static
, स्थैतिक होना क्या है? क्या यह गैर-स्थैतिक नहीं हो सकता है, इसलिए इसे तत्काल किया जा सकता है?
एक और दिलचस्प उपयोग यह है (जो एकता ने यह जांचने के लिए किया था कि कोई वस्तु (और इसलिए मोनोहेवियर का एक उदाहरण है) सुस्त है:
public static implicit operator bool (CustomClass c)
{
return c != null;
}
ध्यान दें कि कोड को कक्षा के अंदर होना चाहिए (इस मामले में CustomClass)। इस तरह से आप कुछ इस तरह से कर सकते हैं:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
जाहिर है सबसे अधिक कुख्यात उपयोग हो सकता है इसका उपयोग अपनी कक्षाओं में से एक को अपनी कक्षाओं में बदलने के लिए किया जाए। लेकिन बुनियादी प्रकार के साथ उनका उपयोग करना एक विचार के रूप में अच्छी तरह से लायक है ... और मुझे लगता है कि यह काफी दुर्लभ रूप से उल्लेख किया गया है।
यह एक अंतर्निहित रूपांतरण ऑपरेटर है (स्पष्ट ऑपरेटर के विपरीत, जिसके लिए (type)
रूपांतरण सिंटैक्स की आवश्यकता होती है )