2009-07-09 12 views
6

मैं समझता हूं कि विधि/फ़ंक्शन ओवरराइड करने से व्युत्पन्न कक्षा में इसके कार्यान्वयन से मूल कक्षा में कार्यान्वयन को फिर से परिभाषित किया जाता है।क्या मुझे एएसपी.NET के लिए सी # में एक विधि को ओवरराइड करते समय बेस क्लास कार्यान्वयन को कॉल करना चाहिए?

अब क्या मुझे confuses, अगर मैं ASP.NET जैसे CreateChildControls() में एक वर्ग को ओवरराइड है (मैं इसे कोई विशेष कारण के लिए बेतरतीब ढंग से उठाया), VS2008 स्वत: उत्पन्न करता है:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
} 

काफी अच्छा है, डिफ़ॉल्ट कार्यान्वयन बस बेस क्लास 'CreateChildControls() पर कॉल करता है।

तो अगर मैं, के बाद से मैं कैसे base.CreateChildControls() पता नहीं है, कुछ कोड चलाना चाहते हैं मैं इस करना चाहिए:

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
    base.CreateChildControls(); 
} 

या, उपेक्षा क्या base.CreateChildControls() पूरी तरह और बस

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
} 

उत्तर

11

है कि कर आप पर निर्भर करता है। आम तौर पर, आप बेस क्लास विधि को कॉल करना चाहते हैं क्योंकि यह ऐसी कई चीजें कर सकता है जिनके लिए आप गोपनीय नहीं हैं (विशेष रूप से उस कक्षा में जिसे आप नियंत्रित नहीं करते हैं .. इसे प्राप्त करें? नियंत्रण।) लेकिन, अगर आप बहुत आश्वस्त हैं बेस क्लास "सामान" होने की आवश्यकता नहीं है (या चाहते हैं), आप कॉल को हटा सकते हैं।

+0

यह वास्तव में आश्चर्यजनक है कि आपको उस बेस क्लास को ओवरराइड करने की अनुमति होगी जिसे आप गोपनीय नहीं हैं। – Matt

+7

मुझे वह स्वतंत्रता प्राप्त करनी है। सिर्फ इसलिए कि मैं तुम्हारा बच्चा हूं, इसका मतलब यह नहीं है कि मैं आपके जैसा सब कुछ करना चाहता हूं। कभी-कभी, मुझे दुनिया में बाहर जाना और चीजों को अपना रास्ता बनाना है। यदि आप मुझे अपना कार्यान्वयन करने के लिए मजबूर करते हैं तो आप एक अतिसंवेदनशील माता-पिता होंगे। :) –

+0

इस तथ्य से शुरू करना कि मैं अपने कस्टम 'कंट्रोल' में ओवरराइड करते समय बेस क्लास का आविष्कार कर रहा हूं, 'ऑनएक्सxxएक्स' ओवरराइड के संबंध में मुझे आम तौर पर मिला कि मैं अपनी व्युत्पन्न विधि के अंत में 'base.OnXxxx' को कॉल करता हूं। क्या व्युत्पन्न विधि की शुरुआत या अंत में 'बेस। क्रेट चाइल्डकंट्रोल' को कॉल करने के लिए अंगूठे का कोई नियम है? – superjos

3

यह केवल एक प्रश्न है कि आप व्यवहार को पूरी तरह से बदलना चाहते हैं या व्यवहार जोड़ना चाहते हैं।

CreateChildControls जैसे कुछ के लिए, आप शायद बेस क्लास को कॉल बनाए रखेंगे।

1

यह इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं। यदि आप आधार चाहते हैं। क्रेटChildControls() विधि को कॉल करने के लिए और फिर आप विधि से पहले या बाद में कुछ कस्टम कार्रवाई करना चाहते हैं, तो आप ऐसा कर सकते हैं।

यदि आप CreateChildControls कहलाते हैं तो क्या हो रहा है, इसके बारे में पूर्ण नियंत्रण रखना चाहते हैं, तो आप इसे पूरी तरह से कॉल करना अनदेखा कर सकते हैं।

तथ्य यह है कि यह डिफ़ॉल्ट रूप से वहां है, यह आपके लिए थोड़ा सा मार्गदर्शन है।

0

यह निर्भर करता है अगर तुम करना चाहते हैं या पूरा आधार कार्यान्वयन की जगह ... ज्यादातर मामलों में आप आधार कार्यान्वयन बुलाना चाहिए (और आप निश्चित रूप से CreateChildItems विधि के मामले में यह करना चाहिए ...)

0

आप template method पैटर्न पर एक नज़र डालना चाहते हैं। जबकि आप पुस्तकालय कक्षाओं के तरीके के बारे में कुछ भी नहीं कर सकते हैं, यह आपको यह सुनिश्चित करने में मदद कर सकता है कि आपके द्वारा लिखे गए कोड को सही तरीके से उपयोग करना आसान है।

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