FastMethodOperator.Default //系统域
FastMethodOperator.Create("MyDomain") //创建一个新的独立域
FastMethodOperator.Random() //使用一个随机域
//如果方法里传 bool 类型则可以告诉编译器,是否编译成DLL文件,默认是编译到内存。
FastMethodOperator 操作类中,构造函数里制作了一个默认的模板:
HiddenNameSpace()
.OopAccess(AccessTypes.Public)
.OopModifier(Modifiers.Static)
.MethodAccess(AccessTypes.Public)
.MethodModifier(Modifiers.Static);
模板的样子翻译成字符串为:
using xxx;
public static class xxx
{
public static xx NatashaDynamicMethod(xxx)
{
//content
}
}
以上的结果可以看出,xxx
的内容可能需要由自己来定制。Natasha考虑到这种情况,在模板中实现了‘自实现’功能。
className:
在类模板中,类名初始化会被随机创建,如下:OopNameScript = "N" + Guid.NewGuid().ToString("N");
, 类名将自动以GUID的形式创建。
returnType/params:
在FastMethodOperator中重写了Complie
## 为什么不自动实现Using
Natasha的模板都是写活的,Builder都十分的灵活,因此您可以不用拘泥于FastMethodOperator的模板,在使用时根据自己的场景进行定制。
例如:
Operator.OopAccess(AccessTypes.Internal);
这将覆盖原有的OopAccess函数功能。
var script = FastMethodOperator.Default
.Param<string>("str1")
.Param<string>("str2")
.MethodBody(@"
string result = str1 +"" ""+ str2;
Console.WriteLine(result);
return result;")
.Return<string>()
.Builder()
.MethodScript;
/*可以看到生成的代码:
public static string NatashaDynamicMethod(String str1, String str2)
{
string result = str1 +" "+ str2;
Console.WriteLine(result);
return result;
}*/
您还可以在. 之后找到 UseAsync/UseUnsafe 等方法,它们可以让您定制更加丰富的功能。 这里有个有趣的地方,如果您去看过Natasha的CI过程的测试会发现,日志中有很多“Hello World”, 这些就是在动态方法中输出的hello world,在测试的时候被输出出来了。