2009-11-13 9 views
17

पर कैसे Go इंटरफेस संभालती देख रही है और यह पसंद के बाद, मैं कैसे आप इस तरह सी # में इसी तरह बतख टाइपिंग प्राप्त कर सकते थे के बारे में सोचना शुरू कर दिया फ्लाई पर एडाप्टर बनाने के लिए System.Reflection.Emit। शायद किसी ने पहले से ही कुछ लिखा है। मुझे लगता है कि यह पहले से ही क्या नकली ढांचे से अलग नहीं है।को लागू सी # में सुरक्षित बतख टाइपिंग

हालांकि, Mallard में वास्तव में IDuck विधियों का सही समय नहीं है, तो यह रन-टाइम पर अपवाद फेंक देगा। संकलन समय पर पहले त्रुटि प्राप्त करने के लिए, मुझे MallardToDuckAdapter लिखना होगा जो कि मैं बचने की कोशिश कर रहा हूं।

क्या कोई बेहतर तरीका है?

संपादित करें: जाहिर है कि मैं "सुरक्षित बतख-टाइपिंग" कहने के लिए उचित शब्द structural typing है।

+0

मैंने जेनेरिक system.runtime.serialization formatters के साथ काम करने के लिए System.xml.serialization सिस्टम को अपनाने से पहले इसके लिए कामना की है। –

+1

इसके अलावा: क्या यह संकलन-समय, या बस रन-टाइम पर जांचें? यदि उत्तरार्द्ध, उन्होंने समस्या के लिए कोई नया समाधान नहीं दिया है, तो आपके द्वारा पहले से उल्लिखित अतिरिक्त एडाप्टर कोड। –

+0

हाँ, एडाप्टर लिखना बतख टाइपिंग के रूप में योग्य नहीं होगा, क्योंकि यह नियमित रूप से सी # टाइपिंग है ... –

उत्तर

13

यदि आप एक जीवित नहीं है, तो आपके सामने गाय सांस लेते हैं, तो आप कैसे जान सकते हैं कि एक गाय एक बतख और बतख की तरह बकर की तरह चलती है?

डक-टाइपिंग रन-टाइम पर उपयोग की जाने वाली अवधारणा है। संकलन-समय पर एक समान अवधारणा structural typing है जो सीएएलआर द्वारा समर्थित AFAIK नहीं है। (CLR nominative typing आसपास केंद्रित है।)

[एक संरचनात्मक प्रकार प्रणाली], कर्ताकारक प्रणाली, जहां तुलना स्पष्ट घोषणाओं या प्रकार के नाम के आधार पर कर रहे हैं, और बतख टाइपिंग के विपरीत है जो केवल के हिस्से में रनटाइम पर पहुंचने वाली संरचना को संगतता के लिए चेक किया गया है।

यह सुनिश्चित करने का सामान्य तरीका कि बतख-टाइपिंग रन-टाइम पर कोई अपवाद नहीं फेंकती है, वे इकाई-परीक्षण होते हैं।

+0

गो में, बतख-टाइपिंग कुछ ऐसा है जो स्थिर रूप से सत्यापित किया जाता है। कंपाइलर गाय वर्ग को देखता है और शिकायत करता है कि इसमें बतख के तरीके नहीं हैं। –

+3

यह संरचनात्मक विरासत की बिल्कुल परिभाषा है :-) – dtb

+0

.NET में, बतख टाइपिंग शब्द के सामान्य अर्थ से भिन्न रूप से उपयोग की जाती है। दुर्भाग्यवश, स्थापित तकनीकी शर्तों को फिर से ब्रांड करना माइक्रोसॉफ्ट (या कम से कम सीएलआर विभाग में) कंपनी शौक का कुछ बन गया है, जो बेहद परेशान है। –

5

DuckTyping for C#

Reflection.Emit आईएल कि सीधे मूल वस्तु कॉल फेंकना प्रयोग किया जाता है

मुझे नहीं लगता कि इस पुस्तकालय आप संकलन समय त्रुटियों सोचा दे देंगे है, मुझे यकीन है कि नहीं कर रहा हूँ यह पूरी तरह से व्यवहार्य होगा। इसके लिए क्षतिपूर्ति में सहायता के लिए यूनिट टेस्ट का उपयोग करें।

+2

कलात्मक लाइसेंस 2.0 के तहत जारी किया गया है! –

+0

+1 मुझे यहां यूनिट परीक्षणों का उपयोग करने का विचार पसंद है। इस तरह आप एक सिंगल-लाइन इकाई परीक्षण लिखने के छोटे ओवरहेड के लिए एडाप्टर क्लास लिखने (संभावित रूप से बड़े) ओवरहेड का व्यापार करते हैं। –

1

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

हालांकि, यह ऐसा कुछ है जो यूनिट परीक्षण के लिए बहुत अच्छा है।

DuckTyper.Adapt<Mallard, IDuck>(mallard); 

सफलतापूर्वक मानचित्र सत्यापित करने के लिए आप एक यूनिट परीक्षण लिखेंगे।

1

मुझे पता है कि वीबी 10 (सी # के बारे में कोई जानकारी नहीं) के लिए अंतर्निहित इंटरफेस (जो गो इंटरफेस हैं) की योजना बनाई गई थी। दुर्भाग्यवश, उन्हें रिलीज से पहले हटा दिया गया था (मुझे लगता है कि उन्होंने इसे बीटा में भी नहीं बनाया ...)। यह देखना अच्छा लगेगा कि वे .NET के भविष्य के संस्करण में उपस्थित होंगे या नहीं।

बेशक, नया dynamic प्रकारों का उपयोग बहुत अधिक प्राप्त करने के लिए किया जा सकता है लेकिन यह अभी भी वही नहीं है - अंतर्निहित इंटरफेस अभी भी मजबूत टाइपिंग की अनुमति देता है, जो मुझे महत्वपूर्ण लगता है।

+0

क्या आप वीबी में निहित इंटरफेस से संबंधित अपने दावे का समर्थन करने के लिए लिंक प्रदान कर सकते हैं? – Dario