2011-08-19 18 views
5

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

उत्तर

2

नहीं वास्तव में एक सार विधि हमेशा overidden जाता है और कोई गारंटी नहीं कि ओवरराइड कॉल base.Method() यह के एक कार्यान्वयन के लिए मौजूद है।

आपका सबसे अच्छा शर्त एक आभासी विधि है जो घटना बढ़ाने का और फिर अपने सभी ओवरराइड फोन base.Method()

आप विधि कॉल अवरोधन चाहते हैं बनाने के लिए है, here कि कैसे करना है के बारे में एक सवाल है।

3

सार या नहीं, आप नियंत्रण (आईओसी) ढांचा यहां के एक उलट लिए देख रहे हैं, विशेष रूप से एक आप विधि अवरोधन करने की सुविधा देता है।

मैं Unity, या Spring पर देखता हूं। वहाँ कुछ अन्य हैं।

3

यह करने के लिए सबसे अच्छा तरीका है इस प्रकार है:

public abstract class MyClass { 

    public void DoOuter() { 
     FireEvent(); 
     DoInner(); 
    } 

    protected abstract void DoInner(); 
} 

जब कोई doInner कॉल करने के लिए वे इसे निष्पादित करने के लिए में DoOuter() कॉल करनी होगी चाहता है। कार्यक्षमता निर्दिष्ट करने के लिए आप DoInner() ओवरराइड करते हैं। तो FireEvent() को हमेशा DoInner() कार्यक्षमता निर्दिष्ट करने से पहले हमेशा कॉल किया जाता है ... जब तक कि इसे सीधे बाल वर्ग द्वारा नहीं कहा जाता है, जिसे आप वास्तव में सुरक्षित नहीं कर सकते हैं।

+1

यह वास्तव में एक सी # सवाल है, इसलिए मैं प्रश्न को संपादित कर रहा हूँ एक छोटी सी है, लेकिन मुख्य विचार सही है। – StriplingWarrior

+0

डी ओह। धन्यवाद, StriplingWarrior। – DJClayworth

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