根据CLR的GenericParamConstraint表的Partition II元数据规范,
问题是我似乎找不到正确的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)
{
}
}
..但是问题是C#编译器仅为GenericParam表生成行,而不为GenericParamConstraint表添加行。所以这是我的问题-是否有任何用C#编写的代码示例都会迫使C#编译器向GenericParamConstraint表中添加元数据行,以便我可以使用示例二进制文件?并且,如果这是C#编译器方面的某种限制,是否有等效的ILASM代码片段可以代替此功能?
最佳答案
您一定会感到困惑,您发布的,使用csc编译的确切代码会导致GenericParamConstraint表中的三行。
在这种情况下,GenericParam U
的 token 为2a000001,并且受System.ValueType TypeRef约束。 T
(2a00000a)受IFoo和IBaz TypeDef约束。
关于.net - 通用参数约束的哪种组合将使C#编译器为GenericParamConstraint元数据表生成行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5550538/