2011-06-01 12 views
6
class Person 
{ 
    string Name; 
    int Age; 
} 

मुझे लगता है मैं जानता हूँ कि मैं अंतर्निहित कास्टिंग को परिभाषित करते हुए निम्न कर सकते हैं परोक्षओवरलोडिंग/के लिए 'के रूप में'

var mrFoo = "Foo" as Person; 

निम्नलिखित की तरह व्यक्ति के लिए एक स्ट्रिंग कास्ट करने के लिए सक्षम होना चाहते हैं अंतर्निहित ऑपरेटर

Person mrFoo = "Foo"; 

लेकिन मैं "as" ऑपरेटर

+1

आप स्पष्ट कास्ट ऑपरेटर ओवरलोड को परिभाषित कर सकते हैं और 'as' ऑपरेटर के बजाय एक स्पष्ट कलाकार '(व्यक्ति)' का उपयोग कर सकते हैं। –

उत्तर

20

का उपयोग करने के लिए विशिष्ट हूं, नहीं, आप ऐसा नहीं कर सकते हैं। "As" ऑपरेटर कभी उपयोगकर्ता द्वारा परिभाषित रूपांतरणों का उपयोग करता है - केवल संदर्भ रूपांतरण और अनबॉक्सिंग रूपांतरण। असल में, प्रश्न में संदर्भ पहले से ही सही प्रकार होना चाहिए।

व्यक्तिगत रूप से मैं दृढ़ता से आपको बहुमत के मामलों के लिए रूपांतरण ऑपरेटरों (विशेष रूप से निहित) से दूर रहने की सलाह देता हूं। आम तौर पर रूपांतरण विधि स्पष्ट है, उदा। Person.FromString(...)

+3

+1 ऐसा करने के लिए +1 – SLaks

4

, as ऑपरेटर का उपयोग करने के बाद से आप implicit ऑपरेटर के साथ ऐसा कर सकते हैं कोई ज़रूरत नहीं: http://msdn.microsoft.com/en-us/library/z5z9kes2(v=vs.71).aspx इन पंक्तियों के साथ

कुछ काम करना चाहिए:

public static implicit operator Person(string s) 
{ 
    Person p = new Person() {Name = s}; 
    return p; 
} 

अब आप बस कर सकते हैं:

Person p = "John Doe"; 
+0

तो, आप एक सीलबंद सिस्टम प्रकार में ऑपरेटर को अधिभारित करने में सक्षम कैसे हैं? बहुत यकीन है कि आप यह नहीं कर सकते हैं। –

6

क्या आपने पैरामीटरयुक्त कन्स्ट्रक्टर का उपयोग करने पर विचार किया है?

var mrFoo = नया व्यक्ति ("फू");

+2

यह करने के लिए यह सबसे समझदार तरीका है। – daniel1426

संबंधित मुद्दे