記述 | 意味 |
---|---|
abstract | 抽象クラスを定義します。 |
portable | ポータブルクラスを定義します。 |
記述 | 意味 |
---|---|
public | 継承されるメンバのアクセス属性は基底クラスのまま変わりません。 |
readable | 継承されるメンバのうち、publicアクセス属性のものはreadableアクセス属性に変更されます。 |
internal | 継承されるメンバのうち、public/readableアクセス属性のものはinternalアクセス属性に変更されます。 |
native | 継承されるメンバは全てnativeアクセス属性に変更されます。 |
記述 | 意味 |
---|---|
public | wrapsおよびリダイレクトはどこからでも使用できます。 |
readable | wrapsおよびリダイレクトは内包クラスおよびその派生クラス、注入クラスからはフルアクセス、 それ以外からは読み取り専用として使用できます。 |
internal | wrapsおよびリダイレクトは内包クラスおよびその派生クラス、注入クラスからのみ使用できます。 |
native | wrapsおよびリダイレクトはFGESレベルでは一切使用できません。 ただしネイティブインターフェイスは使用できる場合があります。 |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> | var int n; method #Value(IInteger v){@n=v;}//valuesインターフェイスから変換するためのメソッド } method C Def(values C v){//実際の仮引数型はIInteger retval v.n+10;//retvalでもvaluesインターフェイスを使用できます } method void Use(){ Def(100).n;//評価結果は110 } |
< 1> < 2> | } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> | classvar int x_cv=10; var int x_v; method portable int x_met(){ //この例でthisはAやBのインスタンスなので、portableでなければ呼び出せない //↓X::x_vにアクセスしているように見えるが、あくまでthis.$x_vへのアクセス。 //↓ただし@$x_vとは違い、X::x_vの型であるint型として解釈できるか実行時に検証され、 //↓解釈できなければ例外となる。さらにコンパイル中、@x_vはint型として解決される。 retval @x_v*2; } } class A:inject X{ } class B:extends A{ method override int x_met(){ retval super()*3;//superの対象はA::x_met (Aに注入された X::x_met) } } method void Use(){ A a; a.x_v=100;//A::x_v (Aに注入された X::x_v)を操作する (A::x_cv#==X::x_cv);//true a.x_met();//A::x_met (Aに注入された X::x_met)を呼び出す→結果は200 B b; b.x_v=50; (a.x_v#==b.x_v);//false b.x_met();//300 } |
記述 | 意味 |
---|---|
public: | 対象はどこからでも使用できます。 |
readable: | 対象は同クラスおよびその派生クラス、注入クラスからはフルアクセス、 それ以外からは読み取り専用として使用できます。 |
internal: | 対象は同クラスおよびその派生クラス、注入クラスからのみ使用できます。 |
native: | 対象はFGESレベルでは一切使用できません。 |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> | var int def_attr;//デフォルト(public) public: var int public_attr;//public readable: var int readable_attr;//readable internal: var int internal_attr;//internal native: var int native_attr;//native } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> | var int n; method void IInteger@@Set(IInteger v){@n=v;}//実装用テンプレート } class deriv_class:extends base_class implements IInteger{ alias super::IInteger@@Set IInteger@@Set;//テンプレートを実装として割り当てる } method void Use(){ deriv_class o; o#TypeCast IInteger.Set(100);//deriv_class::IInteger@@Setの呼び出し o.n;//評価結果は100 } |