यह एक बहुत ही असामान्य समस्या है और निश्चित रूप से कई कामकाज हैं, लेकिन मैं समझना चाहता हूं कि वास्तव में क्या चल रहा है और यह क्यों काम नहीं कर रहा है।
तो मैं एक परीक्षण समाधान में 3 विधानसभाओं है, सबसे पहले विधानसभा टाइप ClassA है:स्पष्ट कास्ट ऑपरेटर "असेंबली संदर्भित नहीं है" त्रुटि
public class ClassA
{
public string Name { get; set; }
}
दूसरा विधानसभा संदर्भ पहले विधानसभा और है ClassB:
public class ClassB
{
public string Name { get; set; }
public static explicit operator ClassA(ClassB objB)
{
return new ClassA
{
Name = objB.Name
};
}
}
जो एक स्पष्ट ऑपरेटर टाइप करने के लिए कास्ट करने के लिए है कक्षा। आइए मान लें कि हम कुछ कारणों से विरासत का उपयोग नहीं कर सकते हैं और सिर्फ एक प्रकार को दूसरे प्रकार में बदलने के सुविधाजनक तरीके के रूप में कास्टिंग का उपयोग कर सकते हैं।
अब, पिछले विधानसभा संदर्भ दूसरा विधानसभा (! और नहीं पहले एक) और टाइप ClassC:
public class ClassC
{
public string Name { get; set; }
public static explicit operator ClassB(ClassC objC)
{
return new ClassB
{
Name = objC.Name
};
}
}
जो ClassB रूप में एक ही कारण के लिए स्पष्ट डाली ऑपरेटर का उपयोग करता है।
अब दिलचस्प हिस्सा: अगर मैं ClassC से इस तरह, मेरे कोड में ClassB को कास्ट करने के लिए प्रयास करें:
ClassC objC = new ClassC();
ClassB objB = (ClassB)objC;
मैं निम्नलिखित त्रुटि मिलती है:
Error 1 The type 'FirstAssembly.ClassA' is defined in an assembly that is not referenced. You must add a reference to assembly 'FirstAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
मैं आसानी से नई बना सकते हैं क्लासबी का उदाहरण और क्लाससी इंस्टेंस से मूल्यों के साथ इसे शुरू करें (जैसे मैं स्पष्ट कास्ट ऑपरेटर के अंदर करता हूं), और यह ठीक काम करेगा। तो यहाँ क्या गलत है?
यदि आप इसे स्वयं करते हैं तो आप जानते हैं कि क्या करना है; लेकिन यदि आप कास्ट का उपयोग करते हैं तो आप ऑब्जेक्ट को कास्ट के नियमों के अनुसार कंपाइलर को बताते हैं, जिसे कक्षा ए के बारे में जानने की आवश्यकता है .. – TaW
लेकिन क्यों? मैं कहीं भी कक्षा में कास्टिंग नहीं कर रहा हूं। क्या कोई स्रोत दस्तावेज़ है जहां कलाकारों के इन नियमों को विवरण में समझाया गया है? –
दिलचस्प सवाल! मैंने इसे अपने आप परीक्षण किया और उम्मीद कर रहा था कि * 'क्लासबी' * का एक उदाहरण बनाना विफल हो जाएगा, क्योंकि रनटाइम 'क्लासबी' के स्पष्ट कलाकारों का मूल्यांकन नहीं कर सकता है। आश्चर्य की बात है कि यह काम किया! मुझे लगता है कि यह किसी भी तरह से बाध्यकारी स्थिर सदस्यों में संबंधित है। – Carsten