/ / .नेट ऑपरेटर ओवरलोडिंग ??? प्रकार रूपांतरण ऑपरेटर, यह वास्तव में कैसे काम करता है? - .net, ऑपरेटर-ओवरलोडिंग, रूपांतरण-ऑपरेटर

.NET ऑपरेटर अधिभार ??? प्रकार रूपांतरण ऑपरेटर, यह वास्तव में कैसे काम करता है? --नेट, ऑपरेटर-ओवरलोडिंग, रूपांतरण-ऑपरेटर

मेरे पास पहले एनकाउंटर ऑपरेटर है जो नेट में ओवरलोडिंग करते हैं, बहुत पहले मैंने इसे C ++ में इस्तेमाल किया था, लेकिन यह "+" जैसे ओवरलोडिंग ऑपरेटरों की तरह था, अब मेरे पास नीचे की तरह अचानक परिदृश्य है।

मेरे पास एक ढांचा है AccessToken:

[StructLayout(LayoutKind.Sequential)]
public struct AccessToken : IConvertible
{
private string _value;
public AccessToken(string encodedAccessToken)
{
this._value = encodedAccessToken;
}

public static implicit operator AccessToken(string encodedAccessToken)
{
return new AccessToken(encodedAccessToken);
}
}

मैं समझ गया कि पहला तरीका एक निर्माता है, लेकिन मैं सोच रहा था कि वास्तव में दूसरा क्या कर रहा है? निश्चित रूप से किसी तरह का ऑपरेटर ओवरलोडिंग करता है। मैंने पढ़ा http://msdn.microsoft.com/en-us/library/s53ehcz3(v=vs.71).aspx लेकिन सटीक विचार नहीं मिल सका।

उत्तर:

उत्तर № 1 के लिए 1

यह एक अंतर्निहित रूपांतरण है string सेवा मेरे AccessToken। तो आप लिख सकते हैं:

string foo = "asdasd";
AccessToken token = foo;

यह दूसरे सदस्य - अंतर्निहित रूपांतरण ऑपरेटर का आह्वान करेगा। इसके मौजूद होने के बिना, उपरोक्त कोड "t संकलित" नहीं होगा, क्योंकि इससे कोई रूपांतरण उपलब्ध नहीं होगा string सेवा मेरे AccessToken.

व्यक्तिगत रूप से मैं आपको होने की सलाह दूंगा बहुत अंतर्निहित रूपांतरणों के साथ सावधान - वे कोड को समझने में बहुत कठिन बना सकते हैं। केवल कभी न कभी वे बहुत उपयोगी हो सकते हैं (LINQ to XML स्प्रिंग्स)।


जवाब के लिए 0 № 2

अंतर्निहित ऑपरेटर आपको एक प्रकार की आवृत्ति निर्दिष्ट करने की अनुमति देता है A टाइप करने के लिए B प्रकार में परिभाषित रूपांतरण के साथ A.

यह आपके कोड को थोड़ा सरल कर सकता है क्योंकि आपको रूपांतरण विधियों आदि को कॉल नहीं करना है, लेकिन टाइप कर सकते हैं B b = new A(); भले ही A doesn "टी विरासत B.

मुझे लगता है कि यह भ्रम की स्थिति को पेश करता है और अधिक स्पष्ट जाति और रूपांतरण को प्राथमिकता देता है।