有谁知道是否可以在.NET中定义"java自定义类加载器"的等价物?
给一点背景:
我正在开发一种针对CLR的新编程语言,称为"Liberty".该语言的一个特性是它能够定义"类型构造函数",它是编译器在编译时执行并生成类型作为输出的方法.它们是泛型的泛化(该语言确实具有普通泛型),并允许编写这样的代码(使用"Liberty"语法):
var t as tuple<i as int, j as int, k as int>;
t.i = 2;
t.j = 4;
t.k = 5;
Run Code Online (Sandbox Code Playgroud)
"tuple"的定义如下:
public type tuple(params variables as VariableDeclaration[]) as TypeDeclaration
{
//...
}
Run Code Online (Sandbox Code Playgroud)
在这个特定的例子中,类型构造函数tuple提供类似于VB和C#中的匿名类型.
但是,与匿名类型不同,"元组"具有名称,可以在公共方法签名中使用.
这意味着我需要一种方法,最终由编译器发出的类型可以跨多个程序集共享.例如,我想要
tuple<x as int>在程序集A中定义的最终类型与tuple<x as int>程序集B中定义的类型相同.
当然,问题是程序集A和程序集B将在不同的时间进行编译,这意味着它们最终都会发出自己不兼容的元组类型版本.
我考虑使用某种"类型擦除"来做这个,所以我会有一个像这样的一堆类型的共享库(这是"Liberty"语法):
class tuple<T>
{
public Field1 as T;
}
class tuple<T, R>
{
public Field2 as T;
public Field2 as R;
}
Run Code Online (Sandbox Code Playgroud)
然后只重定向来自第i,j和k元组字段来访问Field1,Field2和Field3.
然而,这不是一个真正可行的选择.这意味着,在编译时 …
.net compiler-construction clr language-features programming-languages