pla*_*ano 5 .net clr cil metadata
根据CLR的GenericParamConstraint表的Partition II元数据规范,
GenericParamConstraint表记录每个泛型参数的约束.可以约束每个通用参数以从零或一个类派生.可以约束每个通用参数以实现零个或多个接口.
问题是我似乎找不到正确的C#代码片段让C#编译器在GenericParamConstraint表中生成一行.我试过用
public interface IFoo
{
}
public interface IBaz
{
}
public interface IBar
{
}
public class Foo
{
}
public class SampleClassWithGenericParamConstraint<T>
where T : IFoo, IBaz, new()
{
public void DoSomething<U>(U arg1)
where U : struct
{
}
}
class Program
{
static void Main(string[] args)
{
}
}
Run Code Online (Sandbox Code Playgroud)
..但问题是C#编译器只为GenericParam表生成行,而不是为GenericParamConstraint表添加行.所以这是我的问题 - 是否有任何用C#编写的代码示例会强制C#编译器将元数据行添加到GenericParamConstraint表中,以便我可以使用示例二进制文件?如果这是对C#编译器的某种限制,那么是否有一个等效的ILASM代码片段可以完成这项工作呢?
您一定很困惑,您发布的使用 csc 编译的确切代码会在 GenericParamConstraint 表中生成三行。

在此上下文中,GenericParamU的标记为 2a000001,并且受 System.ValueType TypeRef 约束。T(2a00000a) 受 IFoo 和 IBaz TypeDef 约束。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |