2010-06-23 16 views
6

मैं सीएसएस मूल्यों (जैसे पिक्सेल उदाहरण 12px) का प्रतिनिधित्व करने के लिए अपना स्वयं का प्रकार बना रहा हूं। मेरे प्रकार और स्याही जोड़ने/घटाने/गुणा करने में सक्षम होने के लिए मैंने int से और उसके लिए दो निहित ऑपरेटरों को परिभाषित किया है। सब कुछ एक बात को छोड़कर अच्छा काम करता है .. अगर मैं लिखना:सी # लागू ऑपरेटरों और ToString()

CssUnitBase c1 = 10; 
Console.WriteLine(c1); 

मैं "10" "10px" के बजाय - int करने के बजाय toString इस्तेमाल किया जाता है() विधि अंतर्निहित रूपांतरण। मैं इसे कैसे रोक सकता हूं?

+0

क्या आप कोड को 'CssUnitBase' कक्षा में पोस्ट कर सकते हैं? जिस तरह से आप इसका इस्तेमाल करते हैं, यह int के चारों ओर एक रैपर _be_ प्रतीत होता है। – Oded

+0

यह बताता है कि आप आंतरिक रूप से CssUnitBase में मूल्य को कैसे स्टोर करते हैं और आप इसे कैसे वापस करते हैं। "टॉक सस्ता है, हमें कोड दिखाएं" – vaitrafra

+1

@ वाइट्राफ्रा: मुझे नहीं लगता कि यह इस पर निर्भर करता है। Int से/से एक अंतर्निहित रूपांतरण है, और ToString के लिए ओवरराइड है। वे सार्वजनिक एपीआई के बिट्स हैं जो इस प्रश्न में प्रासंगिक हैं, और मुझे नहीं लगता कि उनका कार्यान्वयन बिल्कुल महत्वपूर्ण है। यही कहा जाता है जो प्रासंगिक है। –

उत्तर

1

"ToString()" विधि को ओवरराइड करें और c1.ToString() का उपयोग करें।

12

हां, int पर एक निहित रूपांतरण है और WriteLine(int) का अधिभार WriteLine(object) से अधिक विशिष्ट है, इसलिए इसका उपयोग किया जाएगा।

आप कर सकते थे स्पष्ट कॉल WriteLine(object) अधिभार:

Console.WriteLine((object)c1); 

... या आप ToString खुद कह सकते हैं, ताकि Console.WriteLine(string) कहा जाता है:

Console.WriteLine(c1.ToString()); 

... या आप कर सकते थे बस int पर अंतर्निहित रूपांतरण को हटा दें। बस यह आपके लिए कितना उपयोगी है? मैं आम तौर पर कर रहा हूँ नहीं बात की इस तरह के लिए अंतर्निहित रूपांतरण के पक्ष में ... (आप अंतर्निहित रूपांतरण निश्चित रूप सेint से रख सकता है, अगर तुम सच में करना चाहता था।)

+0

मैंने इसे एक और तरीका किया है। Int में लागू रूपांतरण अब स्पष्ट है और मेरे पास 4 ऑपरेटरों (+ - * /) अधिभारित हैं जो CssUnitBase पर संचालित होते हैं। इस तरह मेरे पास दोनों हैं - टूस्ट्रिंग को डिफ़ॉल्ट रूप से बुलाया जाता है और अंकगणितीय संचालन बहुत अधिक कोड के बिना (int और CssUnitBase operands के मिश्रण पर) अच्छी तरह से काम कर रहे हैं। CssUnitBase * int जैसे सभी संचालन हमेशा CssUnitBase को वापस करना चाहिए, इसलिए यह हर पहलू में जिस तरह से मैं चाहता हूं। – kubal5003

+0

@ kubal5003: यह चीजों को करने का सही तरीका लगता है, हां। इसे आपके लिए तैयार करने में खुशी हुई। –

1

बस CssUnitBase में ToString विधि ओवरराइड और जब आप इसे स्ट्रिंग के रूप में चाहते हैं तो कॉल करें।

+0

मैंने पहले ही ऐसा कर लिया है! – kubal5003