Показать сообщение отдельно
Старый 16.05.2012, 00:20
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Код AS3:
public class Parent 
{
	public var a:Boolean = false;
	trace("Parent: init members");
	public function Parent() 
	{
		trace( "Parent: ctor" );
 
	}
}
@silin
trace("Parent: init members"); будет вызвано 1 раз, сколько бы экземпляров не создавали. Т.е. это статическая инициализация, не уверен, что это корректная демонстрация порядка инициализации _нестатических_ переменных

Попробуем выкрутиться:
Код AS3:
class A {
	protected var a:Bool = new Bool(false);
	public function A() {
		trace("A {");
		trace("a: " + a);
		trace("}");
	}		
}
class B extends A {		
	public function B() {
		trace("B {");
		trace("Выполняем a = new Bool(true):");
		a = new Bool(true);
		trace("Выполняем super():");
		super();
		trace("a: " + a);
		trace("}");
	}
}
class Bool {	
	private var _value:Boolean;
	public function Bool(value:Boolean) {
		_value = value;
		trace("new Bool(" + value + ")");
	}
	public function toString():String {
		return "[Bool(" + _value + ")]";
	}
}
/*
B {
Выполняем a = new Bool(true):
new Bool(true)
Выполняем super():
new Bool(false)
A {
a: [Bool(false)]
}
a: [Bool(false)]-????????
}
*/
Выводит таки false?

Так, а если просто Boolean?
Код AS3:
class A {
	protected var a:Boolean = false;
	public function A() {
		trace("A {");
		trace("a: " + a);
		trace("}");
	}		
}
class B extends A {		
	public function B() {
		trace("B {");
		trace("Выполняем a = new Bool(true):");
		a = true;
		trace("Выполняем super():");
		super();
		trace("a: " + a);
		trace("}");
	}
}
/*
B {
Выполняем a = new Bool(true):
Выполняем super():
A {
a: true
}
a: true 0_o
}
*/
Теперь уже я ничего не понимаю


Последний раз редактировалось expl; 16.05.2012 в 00:44.