2011-06-17 12 views
20

मेरे पास उप-वर्ग वाला एक वर्ग है। सुपरक्लास में Position संपत्ति है। Position संपत्ति बदल जाती है जब सबक्लास को एक अतिरिक्त ऑपरेशन करना होगा, इसलिए मैं सेटटर विधि को ओवरराइड करने और सुपरक्लास 'सेटर को कॉल करने का प्रयास कर रहा हूं।मैं सी # में किसी संपत्ति के सेटटर विधि को ओवरराइड कैसे करूं?

मुझे लगता है कि मुझे सुपरक्लास सेटटर को कॉल करने के लिए मिला है, लेकिन मैं यह नहीं समझ सकता कि ओवरराइडिंग सिंटैक्स यहां कैसे काम करता है। - लगता है मैं वह भी ओवरराइड करने के लिए चाहता था code

गेटर है सिर्फ अवधारणा के सबूत के लिए:

यहाँ मेरी सबसे अच्छा प्रयास है?

गेटर और सेटर मुझे इस फार्म की त्रुटियों दे: '। SuperClassName.Position [जी एस] एट' क्योंकि यह आभासी, सार चिह्नित नहीं है

विरासत में मिला नहीं ओवरराइड कर सकते हैं सदस्य, या ओवरराइड

यहाँ अच्छा उपाय भी त्रुटियों की एक screencap है: errors

मैं भी set के सामने ओवरराइड कीवर्ड का उपयोग करने की कोशिश की। अनावश्यक गेटर को हटाने से कोई प्रभाव नहीं पड़ता है।

सही वाक्यविन्यास क्या है?

+0

भी ध्यान रखें कि आप गेटर अधिभावी कर रहे हैं, अगर कोड के प्रयोजन के आधार वर्ग स्थिति का उपयोग करें और SnapBodyToPos (कहते थे):

आपका सुपर क्लास संपत्ति परिभाषा virtual की जरूरत है मान सेट किया गया है, आपको "रिटर्न पॉजिट" के बजाय "वापसी" को "वापसी आधार" स्थिति में बदलना होगा –

उत्तर

33

ओवरराइड ठीक है। हालांकि, त्रुटि संदेश के रूप में कहा गया है, तो आप आभासी रूप में आधार वर्ग में संपत्ति चिह्नित करने के लिए ओवरराइड कर रहने की जरूरत:

public virtual Vector2 Position 

जावा के विपरीत, वर्ग के सदस्यों सी # में डिफ़ॉल्ट रूप से आभासी नहीं हैं। यदि आप बेस क्लास नहीं बदल सकते हैं, तो आप भाग्य से बाहर हैं।

+1

हाँ, यही मुझे मिला है। मैं सी # बना रहा हूं लेकिन जावा सोच रहा हूं। धन्यवाद! – Anko

4
अपने आधार वर्ग में

: कीवर्ड virtual

2

आप सदस्यों virtual के रूप में एक सुपर क्लास में virtual के रूप में या abstract

मार्क अपने Vector2 संपत्ति में चिह्नित नहीं ओवरराइड नहीं कर सकते जोड़ें।

public virtual Vector2 Position 
6

आपका Position संपत्ति आधार वर्ग में आभासी नहीं है, तो आप इसे ओवरराइड नहीं कर सकते। यदि आप इसे वर्चुअल बनाते हैं, तो आप इसे ओवरराइड करने में सक्षम होना चाहिए।

यह थोड़ा गंदा दूसरे के बिना एक बिट अधिभावी हो जाता है - यह बात मैं बहुत अक्सर करते हैं की तरह नहीं है, तो मैं क्या हो रहा है के बारे में सुनिश्चित बनाने के लिए इसके साथ चारों ओर खेलने के लिए होगा, लेकिन पहले ऐसा करने के लिए बात आधार वर्ग संपत्ति को बदलने के लिए होगा ...

यह भी है कि वास्तव में क्या संकलक संदेश आपको बता रहा है:

विरासत में मिला नहीं ओवरराइड कर सकते हैं सदस्य 'superClassName.Position।[जी एस] एट 'क्योंकि यह चिह्नित नहीं है आभासी, सार, या ओवरराइड

यह आप आधार वर्ग संपत्ति के बारे में कुछ कह रहा है - ताकि आप किस क्रम ओवरराइड कर में बदलने की जरूरत है। कंपाइलर संदेश मदद करने के लिए हैं - उन पर ध्यान देना!

4

समस्या त्रुटि संदेश :) में आप के लिए कहा जाता है

आप सदस्यों को बताया कि पहली जगह में आभासी (या सार) नहीं हैं ओवरराइड नहीं कर सकते। जब एक

public virtual Vector2 Position { ... } 
संबंधित मुद्दे