2012-01-31 4 views
5

मैं कुछ कोड आज के माध्यम से देख रहा था और निम्नलिखित की तरह कुछ देखा:विंडोज फॉर्म डिज़ाइनर ने फिर से एआरजीबी के लिए int में बाइट करने के लिए क्यों डाला?

var colour = Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(213)))), ((int)(((byte)(193))))); 

जब मैंने पूछा कि क्यों यह इतना था, Resharper की पुष्टि के बाद से है कि सभी डाले निरर्थक हैं, मुझे बताया गया था कि डिजाइनर यह किया है कि रास्ता और उन्होंने इसकी प्रतिलिपि बनाई थी।

मुझे एक नजर और यकीन था कि डिजाइनर एक कस्टम रंग में संपत्ति सेट करते समय उपरोक्त कोड उत्पन्न करता है।

क्या कोई जानता है कि डिजाइनर ऐसा क्यों करेगा? यह उसके चेहरे पर समझ में नहीं आता है, जब तक कि मुझे कुछ याद नहीं आ रहा है?

+3

आप यहां खुश कहानी खो सकते हैं। जब तक मशीनें इस तरह के कोड लिखती हैं, तब तक आपको थोड़ी देर के लिए अपना काम रखना होगा। –

उत्तर

9

यह कोड विनफॉर्म डिजाइनर में बनाए गए कोड सीरिएलाइज़र द्वारा स्वत: जेनरेट किया गया है। यहां दोषी पार्टी सिस्टम है। ड्रॉइंग। रंग कनवर्टर क्लास, रंग के लिए टाइप कनवर्टर। इसके कन्वर्टटो() विधि में प्रासंगिक कोड है:

member = typeof(Color).GetMethod("FromArgb", new Type[] { typeof(int), typeof(int), typeof(int) }); 
    arguments = new object[] { color2.R, color2.G, color2.B }; 

आर, जी और बी गुण एक बाइट लौटाते हैं। तो कोड सीरिएलाइज़र पहले पूर्णांक अक्षरक उत्पन्न करता है और तर्क प्रकार से मेल खाने के लिए (बाइट) कास्ट लागू करता है। फिर देखता है कि FromArgb() पूर्णांक तर्क स्वीकार करता है इसलिए (int) कास्ट लागू होता है।

यह सिर्फ मैनियाकल मशीन जेनरेट कोड है। यह केवल सही होना है, यह सुंदर होना जरूरी नहीं है।

+1

यही वह था जो मैंने बाद में किया था, इस बारे में एक स्पष्टीकरण कि डिजाइनर ने इस तरह कोड को पहले स्थान पर क्यों बनाया था। – Glenn

5

कोई लाभ नहीं है। यह सब कोड को पढ़ने के लिए कठिन बना देता है।

यह बेहतर

var colour = Color.FromArgb(227, 213, 193); 

या यहाँ तक कि अल्फ़ा चैनल संस्करण है:

var colour = Color.FromArgb(255, 227, 213, 193); 

@Alexei Levenkov बताते हैं के रूप में, शायद लेखक सतर्क किया जा रहा था, लेकिन विधि का स्पष्ट नाम दिया और इसका (जाने-माने) इरादा उपयोग, किसी भी पैरामीटर के लिए 255 से अधिक मूल्य का उपयोग क्यों करेगा?

रेफरी। Color.FromArgb Method

+0

+1। बाइट को पहली बार कास्ट मानों को कम करने के लिए उपयोग किया जा सकता है (यदि मान स्थिरांक नहीं होंगे), लेकिन मुझे दूसरी कास्ट के लिए कोई कारण नहीं दिख रहा है। –

+0

आपको लगता है कि यह कोड मानव द्वारा लिखा गया था। यह नहीं था, विनफॉर्म डिजाइनर कोड एक मशीन द्वारा लिखा गया है। इसे केवल संकलन करना है, सुंदर होने की आवश्यकता नहीं है। –

+1

@ हंस: जब मैंने सवाल पढ़ा "मुझे बताया गया कि डिजाइनर ने इसे इस तरह से किया" इसे 'ए' डिजाइनर की तरह ध्वनि बनाया, न कि 'डिजाइनर'! मुझे पता है कि Winforms डिजाइनर क्या है। –

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

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