天天看點

在Maxscript中建立.Net類型

在vs中,我們看到messagebox這個類的完全體

在Maxscript中建立.Net類型

在mxs中,使用dotnetclass可以通路一個執行個體類、靜态類、枚舉、結構體...他關聯的是靜态屬性、方法

使用dotnetobject可以new一個執行個體對象

使用mxs的方式調用函數

"你好max" 是一個mxs内的字元串,他可以與 public static dialogresult show(string text); 中參數的string類型通用

在maxscript與.net的互動中,普通的基礎類型可以直接傳遞,至少大部分情況下是通用的

在c#中string的建立形式為

在Maxscript中建立.Net類型

上面是使用關鍵字的方法建立,看起來很美好,但并不便于轉換了解

我們可以把它變成原始的方式

在Maxscript中建立.Net類型

在mxs中就是這樣

在建立一個比較好了解的類型

在Maxscript中建立.Net類型

至于在mxs裡為啥不能直接使用無構造函數的方式,不得而知

在Maxscript中建立.Net類型
在Maxscript中建立.Net類型
在Maxscript中建立.Net類型

valuetodotnetobject 可以将mxs的資料類型轉換到.net的資料類型

https://trykle.gitee.io/3dsmax-2020.1-maxscript-help/?query=dotnet.valuetodotnetobject#!/url=./files/guid-fb52fdc5-cc83-46fb-a430-b90e7107805a.htm

如果你是用的泛型list<>,那麼他應該與下方的泛型建立方法雷同

c#裡字典的建立形式

在Maxscript中建立.Net類型

在mxs裡長這樣

在Maxscript中建立.Net類型

老實說,我并不知道這樣寫的規則出處在哪

但我通過ilspy能看到一些類似的文法

在Maxscript中建立.Net類型

`後面的數字表示泛型參數

string int 換成具體的類型

<>換成[]

在Maxscript中建立.Net類型

編譯之後在ilspy中切到c#的遠古版本,他長這樣

在Maxscript中建立.Net類型

il中他長這樣

在Maxscript中建立.Net類型

結合上面的泛型規則,他在mxs裡長這樣

在Maxscript中建立.Net類型
在Maxscript中建立.Net類型

第一步先找到這個方法

第二步建立參數,參數是個枚舉類型

在Maxscript中建立.Net類型

在此翻車了,我們無法找到這個類型

在Maxscript中建立.Net類型

我們來驗證一下枚舉類型的建立方法,找到一個其他的枚舉類型

在Maxscript中建立.Net類型
在Maxscript中建立.Net類型

說明這樣是沒有錯的

轉到il中,他們分别變成了這樣,system.environment後面變成了/

在Maxscript中建立.Net類型

把/變成+,正常列出 (至于為什麼要把/變成+,不得而知)

在Maxscript中建立.Net類型

最後調用方法

在Maxscript中建立.Net類型

最後關于不得而知的類型建立字元串

這與c#的反射建立類型是一緻的

https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.createinstance?view=net-5.0

通過gettype可以擷取到完整名字

在Maxscript中建立.Net類型
上一篇: 14.模闆模式

繼續閱讀