haXe學習筆記(五)

2021-08-26 04:18:28 字數 2191 閱讀 1614

動態型別

一、可以賦任意型別的值

var dynamicvar : dynamic; dynamicvar = "hello"; dynamicvar = 123; 二、可以賦值給其他任意型別變數

var dynamicvar : dynamic; var year : int; dynamicvar = "hello"; year = dynamicvar;//會產生執行時錯誤

三、可以動態新增任意型別的變數,包括函式變數

var dynamicvar : dynamic; dynamicvar = {}; dynamicvar.id = 12; dynamicvar.name = "name";

dynamicvar.func = function (name:string) ;

dynamicvar.func("test");

四、引數化動態類:所有變數型別都必須是指定型別

var dynamicvar : dynamic; dynamicvar = {}; dynamicvar.id = "id";

dynamicvar.name = "name";

五、類實現dynamic介面:可以動態新增任意型別變數

class user implements dynamic

var u = new user();

u.name = "name";

u.newvar = 10;//動態建立的變數,訪問類裡未定義的變數時,帶變數名的resovle方法會被呼叫

六、類實現dynamic介面,並制定引數型別:可以動態新增指定型別的變數

class user implements dynamic

var u = new user();

u.name = "name";

u.newvar = "10";

七、resolve應用

class component implements dynamic

public function resolve(name : string) : string

} var c = new component();

trace(c.a);//b

八、關鍵字dynamic

載入方法前面的修復符,用於動態重新定義方法,只有部分平台支援,而且會降低效能

public dynamic function myfunction()

九、屬性

1. 用get、set方法定義

class ducktype

public function setid(id:int):int

public function new(id:int, name:string)

}

2. 唯讀、只寫

public var readonly(getprop, null) : string;

public var writeonly(null, setprop) : string;

3. 預設get、set

var prop(default, setx) : int;

var prop(getx, default) : int;

4. dynamic:動態指定get、set方法,flash平台不能使用,js平台可以使用

class c

}

var c = new c();

var my_age = 26;

reflect.setfield(c, "get_age", function() );

reflect.setfield(c, "set_age", function(a) );

trace(c.age); // 26

c.age++; // will call c.set_age(c.get_age()+1)

trace(c.age); // 27

5. null:外部無法訪問,內部可以訪問

public var readonly(getprop, null) : string;

6. never:內部和外部都無法訪問,甚至通過反射也不行

public var readonly(getprop, nerver

) : string;

7. 如果變數為動態型別,或者在untyped塊中,則無法使用屬性

var c : dynamic = new c(); trace(c.x);//為空

haXe學習筆記(二)

一 基本資料型別 1.bool enum bool 3.int 比較奇怪,int繼承於float,這樣所有用到float引數的地方都可以用int,而其他語言則會把int自動轉換為float class int extends float 4.string 有點不一樣的是string可以換行 比如 t...

C 學習筆記(五)

今天來學習一下overload 過載 它和override 重寫是有區別的。通常,自然語言中同乙個詞可以代表多種不同的含義,具體含義要依賴上下文來確定。這就是所謂的一次多義 該詞被過載 overload 了。在c 中,還有另外乙個因素會使函式名過載 建構函式。因為建構函式的名字預先由類的名字確定,所...

Qt Model View 學習筆記 五

view 類 概念 在model view架構中,view從model中獲得資料項然後顯示給使用者。資料顯示的方式不必與model提供的表示方式相同,可以與底層儲存資料項的資料結構完全不同。內容與顯式的分離是通過由qabstractitemmodel 提供的標準模型介面,由qasbstractite...