ActionScript 3
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग
खोज…
स्थैतिक विधि के माध्यम से "अतिभारित" कंस्ट्रक्टर
As3 में कन्स्ट्रक्टर ओवरलोडिंग उपलब्ध नहीं है।
किसी वर्ग के उदाहरण को पुनः प्राप्त करने के लिए एक अलग तरीका प्रदान करने के लिए, वैकल्पिक "कंस्ट्रक्टर" के रूप में सेवा करने के लिए एक public static
विधि प्रदान की जा सकती है।
इसके लिए एक उदाहरण है flash.geom.Point
, जो 2 डी बिंदु ऑब्जेक्ट का प्रतिनिधित्व करता है। बिंदु को परिभाषित करने के लिए निर्देशांक हो सकते हैं
नियमित निर्माता में कार्टेशियन
public function Point(x:Number = 0, y:Number = 0)
उदाहरण का उपयोग:
var point:Point = new Point(2, -.5);
एक स्थिर विधि में ध्रुवीय
public static function polar(len:Number, angle:Number):Point
उदाहरण का उपयोग:
var point:Point = Point.polar(12, .7 * Math.PI);
क्योंकि यह एक वास्तविक निर्माता नहीं है, कोई
new
कीवर्ड नहीं है।
कार्य सेट करें और प्राप्त करें
एन्कैप्सुलेशन सुनिश्चित करने के लिए, एक वर्ग के सदस्य चर private
होने private
और केवल public
से / set
एक्सेस विधियों के माध्यम से जनता के get
सुलभ होना चाहिए। यह के साथ निजी क्षेत्रों उपसर्ग के लिए एक आम बात है _
public class Person
{
private var _name:String = "";
public function get name():String{
return _name;
//or return some other value depending on the inner logic of the class
}
public function set name(value:String):void{
//here you may check if the new value is valid
//or maybe dispatch some update events or whatever else
_name = value;
}
कभी-कभी आप भी एक बनाने के लिए की जरूरत नहीं है private
एक के लिए क्षेत्र get
/ set
जोड़ी।
उदाहरण के लिए एक कस्टम रेडियो समूह जैसे नियंत्रण में आपको यह जानना होगा कि कौन सा रेडियो बटन चुना गया है, हालाँकि कक्षा के बाहर आपको केवल चयनित मान get
/ set
करने के get
एक तरीका get
:
public function get selectedValue():String {
//just the data from the element
return _selected ? _selected.data : null;
}
public function set selectedValue(value:String):void {
//find the element with that data
for (var i:int = 0; i < _elems.length; i++) {
if (_elems[i].data == value) {
_selected = _elems[i];//set it
processRadio();//redraw
return;
}
}
}
संकुल
पैकेज कक्षाओं के बंडल हैं। package
स्टेटमेंट का उपयोग करके प्रत्येक वर्ग को पैकेज के भीतर घोषित किया जाना चाहिए। package
स्टेटमेंट आपके पैकेज के नाम के बाद या शीर्ष स्तर के पैकेज में कक्षाएं जोड़ने के मामले में कुछ भी नहीं है। उप-पैकेजों को डॉट ( .
) परिसीमन का उपयोग करके बनाया जाता है। पैकेज स्टेटमेंट के बाद एक ब्लॉक होता है जिसमें एकल class
परिभाषा होती है । उदाहरण:
package {
// The top level package.
}
package world {
// A package named world.
}
package world.monsters {
// A package named monsters within a package named world.
}
पैकेजों को स्रोत रूट के सापेक्ष कक्षाओं की फ़ाइल संरचना से संबंधित होना चाहिए। मान लें कि आपके पास src
नामक एक स्रोत रूट फ़ोल्डर है, तो उपरोक्त को सही ढंग से फाइलसिस्टम में दर्शाया जा सकता है:
src
TopLevelClass.as
world
ClassInWorldPackage.as
AnotherClassInWorldPackage.as
monsters
Zombie.as
ओवरराइड करने की विधि
जब आप एक वर्ग का extend
करते हैं, तो आप उन तरीकों को override
कर सकते override
जो विरासत में मिले override
कीवर्ड का उपयोग करके परिभाषित करते override
:
public class Example {
public function test():void {
trace('It works!');
}
}
public class AnotherExample extends Example {
public override function test():void {
trace('It still works!');
}
}
उदाहरण:
var example:Example = new Example();
var another:AnotherExample = new AnotherExample();
example.test(); // Output: It works!
another.test(); // Output: It still works!
श्रेणी से मूल विधि का संदर्भ लेने के लिए आप super
कीवर्ड का उपयोग कर सकते हैं। उदाहरण के लिए, हम एक और AnotherExample.test()
के शरीर को बदल सकते हैं:
public override function test():void {
super.test();
trace('Extra content.');
}
जिसके परिणामस्वरूप:
another.test(); // Output: It works!
// Extra content.
ओवरराइडिंग क्लास कंस्ट्रक्टर थोड़ा अलग है। override
कीवर्ड को छोड़ा गया है और विरासत में दिए गए कंस्ट्रक्टर तक पहुंच बस super()
:
public class AnotherClass extends Example {
public function AnotherClass() {
super(); // Call the constructor in the inherited class.
}
}
आप तरीकों को get
और set
करने में भी ओवरराइड कर सकते हैं।
गेटटर और सेटर
गेटर्स और सेटर ऐसी विधियां हैं जो गुणों की तरह व्यवहार की जाती हैं। इसका मतलब है कि उनके पास फ़ंक्शन संरचना है लेकिन जब उपयोग किया जाता है, तो उन्हें गुणों के रूप में उपयोग किया जाता है:
गटर कार्यों की संरचना :
वे होना चाहिए get
करने के बाद कीवर्ड function
कीवर्ड और समारोह नाम से पहले, कोई तर्क के साथ, एक वापसी प्रकार निर्दिष्ट और एक मूल्य लौटाएगा:
public function get myValue():Type{
//anything here
return _desiredValue;
}
सिंटैक्स :
एक गेटर से मूल्य प्राप्त करने के लिए, सिंटैक्स एक संपत्ति से एक मूल्य प्राप्त करने के समान है (कोई पार्न्स ()
का उपयोग नहीं किया जाता है)।
trace(myValue);
सेटर कार्यों की संरचना :
वे होना चाहिए set
के बाद कीवर्ड function
एक तर्क है, और कोई मूल्य वापसी के साथ कीवर्ड और समारोह नाम से पहले,।
public function set myValue(value:Type):void{
//anything here
_desiredProperty=value;
}
सिंटैक्स :
एक सेटर के मान को सेट करने के लिए, सिंटैक्स एक संपत्ति का मान सेट करने के समान है (बराबर चिह्न का उपयोग करके =
फिर मूल्य)।
myValue=desiredValue;
एक मूल्य के लिए एक गेट्टर और सेटर सेट करना :
नोट: यदि आप एक नाम के साथ केवल गेट्टर या केवल सेटर बनाते हैं, तो वह संपत्ति केवल-पढ़ने के लिए या सेट-ओनली होगी।
संपत्ति को पठनीय और सेट करने योग्य बनाने के लिए, एक गटर और एक सेटर बनाना चाहिए:
1. एक ही नाम।
2. एक ही प्रकार (गेट्टर के लिए रिटर्न मान और सेटर के लिए इनपुट मान (तर्क) का प्रकार)
नोट: गेटर्स और सेटर्स में अन्य गुणों या विधियों के समान नाम नहीं होना चाहिए।
गेटर्स और सेटर्स का उपयोग:
सामान्य गुणों के बजाय गेटर्स और सेटरों का उपयोग करने के बहुत सारे लाभ हैं:
1. केवल पढ़ने के लिए या सेट-केवल गुण:
प्रदर्शन ऑब्जेक्ट में उदाहरण के लिए बच्चों की संख्या। यह सेट करने योग्य नहीं हो सकता।
2. निजी संपत्तियों तक पहुंच:
एक उदाहरण:
private var _private:Type=new Type();
//note that function name "private" is not same as variable name "_private"
public function get private():Type{
return _private;
}
3. जब कोई मूल्य निर्धारित करने के बाद कुछ बदलाव की आवश्यकता होती है:
इस उदाहरण में, इस संपत्ति को बदलने की सूचना दी जानी चाहिए:
public static function set val:(input:Type):void{
_desiredProperty=input;
notifyValueChanged();
}
और कई अन्य उपयोग