中文 | English
CI Platform | Build Server | Master Test |
---|---|---|
Github | linux/mac/windows |
此项目为Natasha的衍生项目,通过运行时自动构建高性能操作代理类,为普通类,静态类,动态类,动态类中的动态类,动态生成的静态类等提供了良好的、完备的、高性能的操作,成员索引及类型缓存均采用高性能算法进行重建,如果反射、dynamic都不能满足高端的需求,可使用本类库,它将是一个不错的选择。
- 2019-08-01 : 发布v1.0.0.0, 高性能动态调用库。
-
引入 动态构件库: NMS.NCaller
-
引入 编译环境库: DotNetCore.Compile.Environment
-
向引擎中注入定制的域: DomainManagement.RegisterDefault< AssemblyDomain >()
-
敲代码
https://github.com/dotnet-lab/BTFindTree
//DictOperator : 字典风格的操作,默认使用的是精确最小权方法构建属性/字段索引。
CallerManagement.AddType(typeof(A));
var handler = DictOperator.CreateFromType(typeof(A));
var handler = DictOperator.CreateFromString("A");
var handler = DictOperator<A>.Create();
//HashDictOperator : 字典风格的操作,默认使用的哈希二分查找方法构建属性/字段索引。
CallerManagement.AddType(typeof(A));
var handler = HashDictOperator.CreateFromType(typeof(A));
var handler = HashDictOperator.CreateFromString("A");
var handler = HashDictOperator<A>.Create();
//FuzzyDictOperator : 字典风格的操作,默认使用的模糊指针查找方法构建属性/字段索引。
CallerManagement.AddType(typeof(A));
var handler = FuzzyDictOperator.CreateFromType(typeof(A));
var handler = FuzzyDictOperator.CreateFromString("A");
var handler = FuzzyDictOperator<A>.Create();
//LinkOperator : 链式风格的操作,默认使用的是精确最小权方法构建属性/字段索引。
CallerManagement.AddType(typeof(A));
var handler = LinkOperator.CreateFromType(typeof(A));
var handler = LinkOperator.CreateFromString("A");
var handler = LinkOperator<A>.Create();
//HashLinkOperator : 链式风格的操作,默认使用的哈希二分查找方法构建属性/字段索引。
CallerManagement.AddType(typeof(A));
var handler = HashLinkOperator.CreateFromType(typeof(A));
var handler = HashLinkOperator.CreateFromString("A");
var handler = HashLinkOperator<A>.Create();
//FuzzyLinkOperator : 链式风格的操作,默认使用的模糊指针查找方法构建属性/字段索引。
CallerManagement.AddType(typeof(A));
var handler = FuzzyLinkOperator.CreateFromType(typeof(A));
var handler = FuzzyLinkOperator.CreateFromString("A");
var handler = FuzzyLinkOperator<A>.Create();
public class A
{
public int Age;
public DateTime Time;
public B Outter = new B();
}
public class B
{
public string Name;
public B()
{
Name = "小明"
}
}
//Link调用
CallerManagement.AddType(typeof(A));
var handler = LinkOperator.CreateFromType(typeof(A));
handler.New();
handler["Age"].Set(100); // Set Operator
handler.Set("Age", 100); // Set Operator
Console.WriteLine(handler["Time"].Get<DateTime>()); // Get Operator
Console.WriteLine(handler.Get<DateTime>("Time")); // Get Operator
handler.Get("Outter")["Name"].Set("NewName"); // Link Operator
handler.Get<B>("Outter").Name = "NewName"; // Link Operator
//字典调用
CallerManagement.AddType(typeof(A));
var handler = DictOperator.CreateFromType(typeof(A));
handler.New();
handler["Age"]= 100; // Set Operator
handler.Set("Age", 100); // Set Operator
Console.WriteLine(handler["Time"]); // Get Operator
Console.WriteLine(handler.Get<DateTime>("Time")); // Get Operator
((B)handler["Outter"]).Name = "NewName"; // Link Operator
//可以对 接口/虚方法/抽象方法 进行覆盖及实现。
//缓存采用精确查找树实现,以自实现的类名做Key, 提高查询性能。
ProxyOperator<ITest> builder = new ProxyOperator<ITest>();
builder.OopName("ITestClass");
//builder["MethodName"] = "MethodBody";
builder["SayHello"] = "Console.WriteLine(\"Hello World!\");";
var test = builder.CreateProxy("ITestClass");
test.SayHello();