Natasha 域(二)
Natasha的构成
Natasha官网给出的例子中(例子),用了两种方式去完成了同一件事情
这两种方式也是Natasha脚本构建器的重要组成部分,Complier编译器和Template模板。
- Complier编译器 白话就是自己写一个cs代码,然后由Natasha动态编译
- AssemblyCSharpBuilder
- OopBuilder 构建对象模板
- MethodBuilder 构建方法模板
- Template模板 自己写那么多代码不方便,就按照Natasha提供的方法进行编码,这样只需要关注核心业务模块即可
域
-
类似于不同的dll或者命名空间,各部分代码都相互独立
-
通过设置域(UseDomain方法)后,域内的类或方法即可调用
-
创建域
//获取默认域,默认的域名为Default // 等于NatashaReferenceDomain.DefaultDomain NatashaManagement.GetDefaultDomain(); //获取随机域,NatashaReferenceDomain的name即为域名 NatashaManagement.CreateRandomDomain(); //获取指定名称的域 NatashaManagement.CreateDomain(string domainName);
-
域使用举例
public void Domain() { //预热 Natasha NatashaManagement.Preheating(); //创建默认的域 NatashaReferenceDomain management = NatashaManagement.GetDefaultDomain(); StringBuilder bodyCode = new StringBuilder(); //动态编译的代码 // 第一个参数为string,第二个为int // 运行后输入一个数值,系统根据带入的参数判断,选择第int个值并输出 bodyCode.Append("" + "string message = Console.ReadLine();" + "if (message != null){" + " string result = \"\";" + " if (message.Length <= arg2){" + " result = \"not find the message,the length less than \" + arg2;" + " }else{" + " result = $\" you find message is {message.Substring(arg2, 1)}\";" + " }" + " return $\"this params is {arg1}, {result}\";" + "}else{" + " return \"message is null\";" + "}"); var action = NDelegate // 使用默认的域 .UseDomain(management) // class名称为Demo2 .ConfigClass(item => item.Name("Demo2") // 这里如果不加载,必须自己引用所有相关的dll和类型,否则无法使用 // 如果公共的类中不包含,则必须单独引用 // .NoGlobalUsing() //不加载当前域编译产生的Using // 如果该域中其他类单独添加了引用,可以通过该方法不添加此引用 .NotLoadDomainUsing()) .Func<string, int, string>(bodyCode.ToString()); Console.WriteLine(action("测试", 2)); //复用上面的类和方法 var func = NDelegate // 默认的域 .UseDomain(management) // 调用 .Func<string>("return Demo2.Invoke(\"张三\",3);"); Console.WriteLine(func()); }
输出结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)