0

あるクラスから別のクラスにいくつかの変数を渡したいのですが、以下のコードが機能しません。

package a {
  public class a {
    public var a_var:String;
    public var x_var:String;
    public function a() {
      var a_var = 'My name';
      var x_var = 'X string';
    }
    public function show_a():String {
      return a_var;
    }       
  }

  public class b {
    public function b() {
      var a_obj:a = new a();
      trace('trace' + a_obj.a_var); //is this wrong?
      trace(a_obj.show_a()); //is this possible? if so, what would be the output?
    }
  }  
}

a_varclass から classab渡そうとするとa_obj.a_var、null 値が返されます。

これどうやってするの?

4

3 に答える 3

1

あなたのクラスでは、コンストラクターは以下を置き換えます:

public function a() {
    var a_var = 'My name';
    var x_var = 'X string'
}

と:

public function a() {
    this.a_var = 'My name';
    this.x_var = 'X string'
}

キーワードvarはコンストラクターでローカル変数を作成し、フローがコンストラクターから出た後に変数がガベージ コレクションを取得するようにします。
を使用しthisて、その場合に必要なインスタンス変数に値を割り当てます。

于 2009-09-22T10:41:30.787 に答える
0

これは、a のコンストラクターで、クラス フィールド a_var および x_var に割り当てていないためです。ローカル スコープを持ち、コンストラクタ ブロックの最後でスコープ外になる、同一の名前の変数を宣言しています。次の 2 行の先頭から var を削除してみてください。

var a_var = 'My name';
var  x_var = 'X string'

...そして、すべてがうまくいくでしょう。

于 2009-09-22T10:41:50.533 に答える
0

package{}宣言内に複数のクラスを含めることはできません。それらを 2 つのファイルに分割するか、1 つのクラスpackage{}を取り出してpublicアクセス修飾子を削除します。

//A.as
package a
{
  public class A
  {
    //constructor and stuff
  }
}
class B
{
  //class B goes here
}

また

//A.as
package a
{
  public class A
  {
    //constructor and other stuff
  }
}
//B.as
package a
{
  public class B
  {
    //constructor and other stuff
  }
}

そうです、spender が指摘したようにvar、コンストラクターから宣言を削除する必要があります。

于 2009-09-22T10:54:18.153 に答える