2

別のクラスをクラスコンストラクター引数として設定するにはどうすればよいですか?

class MyClass {
     String message = 'myClass';

     void print() {
         print(this.message);
     }
}

class TestClass {
    var myClass;

    TestClass(???) {
        this.myClass = ???(); // ???
    }

    void debug() {
        print('DEBUG: ');
        this.myClass.print();
    }
}

main() {
 MyClass myClass;
 testClass(myClass);
}
4

3 に答える 3

2

できません(少なくとも今は)。最良のオプションは、ビルダー関数をコンストラクターに渡すことです。

class MyClass {
   var clazzBuilder;

   MyClass(this.clazzBuilder);

   doStuff() {
      var instance = clazzBuilder();
      :
   }
}

そして、このように使用します

var myTest = new MyClass(() => new Test());
var myProd = new MyClass(() => new Prod());

Dart チームは、クラスの概念 ( .type ) とリフレクションの両方を言語に追加することを計画していることに注意してください。

于 2012-07-30T00:40:26.360 に答える
1

あなたは実際に何をしたいですか?多くの場合、人々はある言語のパラダイムを他の言語に適用しようとしますが、これはあることを行うには最善の方法ではありません

于 2012-07-30T00:42:33.107 に答える
0

printインスタンスメソッドであり、静的メソッドではないため、クラス自体をに渡す必要はなくTestClass、単にそのインスタンスを渡します。プログラムは次のように修正できます。

class MyClass {
     String message = 'myClass';

     void print() {
         print(this.message);
     }
}

class TestClass {
    var myClass;

    TestClass(MyClass myClass) {
        this.myClass = myClass;
    }

    void debug() {
        print('DEBUG: ');
        this.myClass.print();
    }
}

main() {
 MyClass myClass = new MyClass();
 testClass(myClass);
}

または、より慣用的に:

class MyClass {
   String message = 'myClass';

   void print() => print(message);
}

class TestClass {
  var myClass;

  TestClass(this.myClass);

  void debug() {
    print('DEBUG: ');
    myClass.print();
  }
}

main() {
  testClass(new MyClass());
}
于 2012-07-31T17:19:08.757 に答える