Natasha

返回 | English

域操作

FastMethodOperator.Default             //系统域
FastMethodOperator.Create("MyDomain")  //创建一个新的独立域
FastMethodOperator.Random()            //使用一个随机域

//如果方法里传 bool 类型则可以告诉编译器,是否编译成DLL文件,默认是编译到内存。


构建方式

FastMethodOperator 操作类中,构造函数里制作了一个默认的模板:

HiddenNameSpace()
.OopAccess(AccessTypes.Public)
.OopModifier(Modifiers.Static)
.MethodAccess(AccessTypes.Public)
.MethodModifier(Modifiers.Static);
  1. 隐藏了命名空间。
  2. 类的访问级别为公有。
  3. 类的修饰符为静态,
  4. 方法的访问级别为共有。
  5. 方法的修饰符为静态


期望结果

模板的样子翻译成字符串为:


using xxx;
public static class xxx 
{
    public static xx NatashaDynamicMethod(xxx)
    {
       //content
    }
}


自动定制

以上的结果可以看出,xxx的内容可能需要由自己来定制。Natasha考虑到这种情况,在模板中实现了‘自实现’功能。


## 为什么不自动实现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,在测试的时候被输出出来了。