Dinamik sınıf, özellikler ve yöntemler eklenerek veya değiştirilerek çalışma zamanında değiştirilebilen bir nesneyi tanımlar. String sınıfı gibi, dinamik olmayan bir sınıf mühürlenmiş bir sınıftır. Mühürlenmiş bir sınıfa çalışma zamanında özellikler veya yöntemler ekleyemezsiniz.
Bir sınıfı bildirirken, dynamic niteliğini kullanarak dinamik sınıflar oluşturursunuz. Örneğin, aşağıdaki kod, Protean adında dinamik bir sınıf oluşturur:
dynamic class Protean
{
private var privateGreeting:String = "hi";
public var publicGreeting:String = "hello";
function Protean()
{
trace("Protean instance created");
}
}
Daha sonra Protean sınıfının bir örneğini başlatırsanız, sınıf tanımının dışında buna özellikler veya yöntemler ekleyebilirsiniz. Örneğin, aşağıdaki kod, Protean sınıfının bir örneğini oluşturur ve örneğe aString adında bir özellik ve aNumber adında bir özellik ekler:
var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
trace(myProtean.aString, myProtean.aNumber); // testing 3
Dinamik sınıf örneğine eklediğiniz özellikler çalışma zamanı varlıklardır, bu nedenle tüm denetlemeleri çalışma zamanında yapılır. Bu şekilde eklediğiniz bir özelliğe tür ek açıklaması ekleyemezsiniz.
Ayrıca bir işlev tanımlayıp bu işlevi myProtean örneğinin bir özelliğine ekleyerek myProtean örneğine bir yöntem ekleyebilirsiniz. Aşağıdaki kod, izleme deyimini traceProtean() adındaki bir yönteme taşır:
var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
myProtean.traceProtean = function ()
{
trace(this.aString, this.aNumber);
};
myProtean.traceProtean(); // testing 3
Ancak bu şekilde oluşturulan yöntemlerin, Protean sınıfının özel özelliklerine veya yöntemlerine erişimi yoktur. Ayrıca, Protean sınıfının genel özelliklerine veya yöntemlerine başvuruların da this anahtar sözcüğüyle ya da sınıf adıyla nitelenmesi gerekir. Aşağıdaki örnek, Protean sınıfının özel ve genel değişkenlerine erişmeye çalışan traceProtean() yöntemini gösterir.
myProtean.traceProtean = function ()
{
trace(myProtean.privateGreeting); // undefined
trace(myProtean.publicGreeting); // hello
};
myProtean.traceProtean();
0 yorum:
Yorum Gönder