ILRuntime學習(之一)

       最近在學習ET框架,然後被羣友告知,要先學ILRuntime。行吧,誰讓咱是小白呢。。。。。

       ILRuntime的學習資料我是參考的github上的教程https://ourpalm.github.io/ILRuntime/public/v1/guide/index.html和上面貼出來印象筆記(點擊此處)。使用的Demo也是配套的,代碼上面有很多註釋。這次的學習目的就很簡單,就是基本能夠看懂ET中使用ILRuntime部分的代碼,要求不高。

       按照教程上的辦法編譯整個工程後,就可以開始運行demo了。第一個例子同樣是Hello World。。。。代碼部分的註釋也很詳細。基本啓動ILRuntime的部分代碼都是一樣的,按照教程的說法:直接從StreamingAssets目錄裏讀取了腳本DLL文件以及調試符號PDB文件, 實際發佈的時候,如果要熱更,肯定是將DLL和PDB文件打包到Assetbundle中進行動態加載的,這個不是ILRuntime的範疇,故不具體演示了。

       啓動ILRuntime部分使用的協程,下載了dll文件和pdb文件,接着調用了AppDomain類中的LoadAssembly()方法。這樣就可使用該dll內部的代碼了。

       第二個例子詳細講解了調用類中方法的幾種方式。AppDomain類中的Invoke()方法有兩種重載。第一種重載是接受一個完整的類名(包括命名空間的名字)的重載(string type, string method, object instance, params object[] p),第二個參數是方法名,第三個參數可以填空,第四個是參數列表。第二個重載是接受一方法信息的重載(IMethod m, object instance, params object[] p),後面兩個參數和第一個重載是一樣的。使用後一種重載時,可以先將類保存起來,不向使用第一種重載,每次調用都要獲取一次類的type。然後通過GetMethod()方法獲取要調用的方法,最後再將這兩個參數傳進去執行方法。調用屬性方法時,也可以使用Invoke()來調用,但是對於方法的名字卻有一點不同,如果是get方法,方法名要加"get_"前綴,同時,set方法要加“set_”前綴。另外一點就是,instance參數需要傳遞一個類的實例對象。

       還有一種方法,就是通過匹配參數列表來執行方法。本質上是通過GetMethod()方法來匹配參數列表。最後還是使用Invoke()方法來執行的。

        接着講述了實例化類的例子,實際上就是調用類的構造方法。這裏調用的是AppDomain類中的Instantiate()方法,該方法接受一個類的type參數,和一個參數列表(string type, object[] args = null)。這和調用類的方法差不多。第二種方法就是使用ILType類的Instantiate()方法,該方法適用於不帶參數的構造方法。

       接着講解了調用泛型方法。使用的是InvokeGenericMethod()方法,該方法和Invoke方法相比,就在於多了一個參數IType[] genericArguments。該參數用於指定泛型類,這是一個數組。ILType類型的元素可以使用AppDomain.GetType()方法來獲取。

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章