2010-02-12 14 views
9

मुझे कुछ कोड मिल गए हैं जो कार्यों के लिए virtual कीवर्ड का उपयोग करते हैं, जैसे:वर्चस्क्रिप्ट में वर्चुअल कीवर्ड क्या करता है?

package tryOut{ 
    public class Parent { 

     public function Parent() {} 

     public function foo():void{ 
      trace("Parent foo"); 
     }//foo 

     public virtual function bar():void{ 
      trace("Parent virtual bar"); 
     }//bar  
    }//class 
}//package 

जहां तक ​​मैं virtual कीवर्ड का उपयोग करके समझता हूं, विधि विधि को ओवरराइड करने के तरीके को संशोधित करना चाहिए, या बाल विधि का उपयोग करने का तरीका काम करेगा , या कुछ और। लेकिन ऐसा लगता है कि यह कुछ भी नहीं करता है। विस्तार होने के बाद:

package tryOut { 
    public class Child extends Parent { 
     public function Child() {} 

     public override function foo():void { 
      trace("Child foo"); 
     }//foo 

     public override function bar():void { 
      trace("Child virtual bar"); 
     }//bar 

    }//class 
}//package 

निम्नलिखित कोड प्रिंट करता है:

var parent:Parent = new Parent(); 
var child:Child = new Child(); 

parent.foo(); //Parent foo 
child.foo(); //Child foo 
parent.bar(); //Parent virtual bar 
child.bar(); //Child virtual bar 

var childCast:Parent = child as Parent; 

parent.foo(); //Parent foo 
childCast.foo(); //Child foo 
parent.bar(); //Parent virtual bar 
childCast.bar(); //Child virtual bar 

तो दोनों विधियां ओवरराइड के संबंध में समान कार्य करती हैं। क्या virtual कीवर्ड कुछ बदलता है जो मुझे याद आ रहा है?

उत्तर

17
मदद दस्तावेजों से

(आप फ्लैश का उपयोग कर रहे हैं, तो के लिए कोई खोज करते हैं 'आभासी'):

वहाँ भी कई पहचानकर्ता है कि कभी कभी के रूप में भविष्य सुरक्षित शब्द भेजा जाता है कर रहे हैं। ये पहचानकर्ता एक्शनस्क्रिप्ट 3.0 द्वारा आरक्षित नहीं हैं, हालांकि उनमें से कुछ को सॉफ्टवेयर द्वारा कीवर्ड के रूप में माना जा सकता है जो एक्शनस्क्रिप्ट 3.0 को शामिल करता है। आप अपने कोड में इन पहचानकर्ताओं का उपयोग करने में सक्षम हो सकते हैं, लेकिन एडोब अनुशंसा करता है कि आप उन्हें का उपयोग न करें क्योंकि वे में भाषा के बाद के संस्करण में कीवर्ड के रूप में दिखाई दे सकते हैं।

abstract boolean byte cast 

char debugger double enum 

export float goto intrinsic 

long prototype short synchronized 

throws to transient type 

virtual volatile 

तो AS3 में, आभासी बिल्कुल कुछ नहीं करता है।

+3

और वास्तविक पृष्ठ, रुचि रखने वाले किसी भी व्यक्ति के लिए है: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3_Flex/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9b.html – LopSae

+0

धन्यवाद लोपसे, मैं वास्तव में उस समय फ्लैश खोलने के लिए हुआ था, इसलिए मैंने ऑफ़लाइन सहायता का उपयोग किया। – Ponkadoodle

1

तो दोनों विधियां ओवरराइड के संबंध में समान कार्य करती हैं।

आपको क्या लगता है? आपके द्वारा दिखाए गए परीक्षण तुलनीय नहीं हैं।

childCastParent के रूप में टाइप किया गया है, फिर भी आप अभी भी Child में फ़ंक्शन को कॉल करना समाप्त कर देते हैं।

आप गैर-वर्चुअल विधि के लिए एक ही स्थिति की जांच नहीं करते हैं।

+0

मेरा बुरा, मैंने उदाहरण को सही किया। फिर भी, व्यवहार वही रहता है। – LopSae

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