GenericParamConstraint

GenericParamConstraint

根据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/

10-10 13:32