在vs中,我们看到messagebox这个类的完全体
在mxs中,使用dotnetclass可以访问一个实例类、静态类、枚举、结构体...他关联的是静态属性、方法
使用dotnetobject可以new一个实例对象
使用mxs的方式调用函数
"你好max" 是一个mxs内的字符串,他可以与 public static dialogresult show(string text); 中参数的string类型通用
在maxscript与.net的交互中,普通的基础类型可以直接传递,至少大部分情况下是通用的
在c#中string的创建形式为
上面是使用关键字的方法创建,看起来很美好,但并不便于转换理解
我们可以把它变成原始的方式
在mxs中就是这样
在创建一个比较好理解的类型
至于在mxs里为啥不能直接使用无构造函数的方式,不得而知
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#里字典的创建形式
在mxs里长这样
老实说,我并不知道这样写的规则出处在哪
但我通过ilspy能看到一些类似的语法
`后面的数字表示泛型参数
string int 换成具体的类型
<>换成[]
编译之后在ilspy中切到c#的远古版本,他长这样
il中他长这样
结合上面的泛型规则,他在mxs里长这样
第一步先找到这个方法
第二步创建参数,参数是个枚举类型
在此翻车了,我们无法找到这个类型
我们来验证一下枚举类型的创建方法,找到一个其他的枚举类型
说明这样是没有错的
转到il中,他们分别变成了这样,system.environment后面变成了/
把/变成+,正常列出 (至于为什么要把/变成+,不得而知)
最后调用方法
最后关于不得而知的类型创建字符串
这与c#的反射创建类型是一致的
https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.createinstance?view=net-5.0
通过gettype可以获取到完整名字