2012-03-30 14 views
6

यूनिट परीक्षण को समायोजित करने और मजाक करने के तरीकों और गुणों को घोषित करने के लिए यह एक आम प्रथा बन गया है। गैर वर्चुअल के रूप में कुछ आभासी घोषित करने का प्रदर्शन प्रभाव है?वर्चुअल विधियों का प्रदर्शन प्रभाव

+0

आप testability_ के लिए _design लगता है सब कुछ 'virtual' और सभी वर्गों' open' कर रहा है? हम्म ... –

+0

@StefanHanke: मुझे यह सुझाव नहीं दिख रहा है कि ओपी सोचता है कि यह * बस * है। –

+0

हाँ मुझे नहीं लगता कि यह आवश्यक होने पर किया जाना चाहिए ... यह केवल एक उपाय है जो उचित – TGH

उत्तर

9

सामान्यतः, अंतर यह है कि वर्चुअल विधियों को एक कॉलवर्ट ओपोड का उपयोग करके बुलाया जाता है, जबकि वर्चुअल विधियां मानक कॉल ऑपोड का उपयोग नहीं करती हैं। कॉल ऑपकोड कॉलवर्ट की तुलना में निश्चित रूप से तेज़ हैं, लेकिन मैंने कभी भी इस पर आधारित डिजाइन निर्णय लेने को उचित ठहराने के लिए पर्याप्त रूप से पर्याप्त नहीं पाया है।

Premature optimization is the root of all evil.

+0

आईआईआरसी "बंद कर दिया गया", सी # कंपाइलर सभी उदाहरण विधियों के लिए कॉलवर्ट का उपयोग करेगा, चाहे वे वर्चुअल हों या नहीं। इस तरह सीएलआर शून्यता की जांच करता है। –

+0

@ जॉन स्केट तो क्या इसका मतलब यह है कि दिन के अंत में वास्तव में कोई अंतर नहीं है? – TGH

+0

गुड प्वाइंट जॉन - आप वैल्यू टाइप इंस्टेंस विधियों के अपवाद के साथ सही हैं जो मुझे लगता है - जिसके लिए कंपाइलर एक ऑपोड्स को छोड़ देता है। कॉल करें। – Jeff

1

नहीं, वास्तव में नहीं।

ऐसा कुछ नहीं है जिसे आप नोटिस करने जा रहे हैं।

1

मैं बारीकियों पता नहीं है, लेकिन मुझे पता है कि तुम वहाँ बाहर क्षुधा के 99% के लिए इसके बारे में चिंता करने की ज़रूरत नहीं है।

बीटीडब्ल्यू - यदि कक्षाओं के बजाय इंटरफ़ेस मॉक करना चुनते हैं तो आपको वर्चुअल विधियों की आवश्यकता नहीं होगी।

गुड लक, टॉम

+0

आपके पास वर्चुअल विधि के रूप में एक इंटरफेस के साथ एक ही संकेत 'जुर्माना' है। – leppie

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