Какая комбинация ограничений общих параметров заставит компилятор C # генерировать строки для таблицы метаданных GenericParamConstraint?

В соответствии со спецификацией метаданных Раздела II для таблицы GenericParamConstraint для CLR,

Таблица 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)
        {
        }
    }

.. но проблема в том, что компилятор C # генерирует только строки для таблицы GenericParam вместо добавления строк для таблицы GenericParamConstraint. Итак, вот мой вопрос - есть ли какой-либо образец кода, написанный на C #, который заставил бы компилятор C # добавить строку метаданных в таблицу GenericParamConstraint, чтобы я мог использовать образец двоичного кода? И если это какое-то ограничение со стороны компилятора C #, существует ли эквивалентный фрагмент кода ILASM, который мог бы выполнять эту работу вместо этого?

5
задан plaureano 5 April 2011 в 10:41
поделиться