天天看点

在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.模板模式