Делегаты более легкие, чем классы?

Я попытался разобрать исполняемый файл, созданный C #, но не смог прийти к выводу. Что я хотел бы знать, так это то, что если для CLR делегатами C # будут действительно особые объекты или просто сахар компилятора?

Я спрашиваю об этом, потому что я реализую язык, который компилируется в C #, и это было бы намного интереснее чтобы я компилировал анонимные функции как классы, а не как делегаты. Но я не хочу использовать дизайн, о котором позже я пожалею, поскольку они могут быть тяжелее для памяти (я думаю о PermGen для Java, чтобы основать свой вопрос. Хотя я знаю, что для CLR такого нет).

Спасибо!

- отредактируйте

, чтобы было немного яснее, я хотел бы знать, есть ли (и каковы) различия между:

void Main()
{
    Func<int, int, int> add = delegate(int a, int b) {return a + b;};
}

и, например,

class AnonFuncion__1219023 : Fun3
{
    public override int invoke(int a, int b)
    {
        return a + b;
    }
}

- - править

Я думаю, что может быть большая разница между:

class Program
{
    static int add(int a, int b)
    {
        return a + b;
    }

    static void Main()
    {
        Func<int, int, int> add = Program.add;
    }
}

и

class Function__432892 : Fun3
{
    public override int invoke(int a, int b)
    {
        return Program.add(a, b);
    }
}

Я где-то читал, что синтаксис Func add = Program.add; - всего лишь сахар для Func add = делегат (int a, int b) {return Program.add; }; . Но я действительно не знаю, правда ли это. Я также мог видеть, что компилятор C # уже кэширует все эти экземпляры, поэтому они создаются только один раз. Но я мог бы сделать то же самое с моим компилятором.

8
задан Waneck 19 February 2011 в 18:00
поделиться