相关疑难解决方法(0)

.NET中类等级的加载器

有谁知道是否可以在.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,Field2Field3.

然而,这不是一个真正可行的选择.这意味着,在编译时 …

.net compiler-construction clr language-features programming-languages

44
推荐指数
1
解决办法
1万
查看次数