C # делегат, анонимные методы, Lambda, общие делегаты, образец кода выражение дерева

Первая минута: комиссия

 Некоторые учебники, блог комиссия будет называться, когда речь идет о событиях, хотя это событие является экземпляром комиссии, но для того, чтобы понять легче, но только комиссия сегодня говорить об этом событии. Первый кусок кода:

  Код ниже, делегат завершения демонстрационного приложения. Комиссия делится на три этапа:

public partial class WebForm3 : System.Web.UI.Page

{

    //step01:首先用delegate定义一个委托 。

    public delegate int CalculatorAdd(int x, int y);

 

    protected void Page_Load(object sender, EventArgs e)

    {

        //step03:用这个方法来实例化这个委托。

        CalculatorAdd cAdd = new CalculatorAdd(Add);

        //int result = cAdd(5, 6);

        int result = cAdd.Invoke(5,6);

    }

    // step02:声明一个方法来对应委托。

    public int Add(int x, int y)

    {

        return x + y;

    }

}

  Step01: Во-первых, делегат по определению делегата.

  step02: способ объявить соответствующий делегат.

  step03: использовать этот метод для создания экземпляра делегата.

  На данный момент, делегат должен завершить, вы можете позвонить в комиссию.

 Вторая минута: анонимные методы

  Через минуту уже знаете, для завершения делегата приложения в три этапа, пропустив шаг не будет работать, если вы хотите, чтобы пересечь большой шаг, большой шаг берегитесь вытащил яйца. Но Microsoft не боится приглашать яйца, сделанные из не-принять три шага, чтобы два шага пошел! Таким образом, Microsoft будет использовать анонимные три способа, чтобы упростить процедуру, описанную выше. Как вы говорите, это вещи анонимные методы в C #, совершенно несущественные вещи, как C # глазурь на торте, это было фантастически и дать ему имя, называется синтаксисом.

public partial class WebForm3 : System.Web.UI.Page

{

    //step01:首先用delegate定义一个委托

    public delegate int CalculatorAdd(int x, int y);

 

    protected void Page_Load(object sender, EventArgs e)

    {

        //step02:用这样的写法 delegate(int x, int y) { return x + y; },把一个方法赋值给委托

        CalculatorAdd cAdd = delegate(int x, int y) { return x + y; };

        int result = cAdd.Invoke(5, 6);

    }

}

  Step01: Во-первых, делегат по определению делегата.

  step02: с формулировкой делегата (Int х, у) INT {вернуться х + у;}, способ назначения делегата, на самом деле, такой подход анонимные методы.

  В это время вы будете удивлены, обнаружив, что это не три шага два шага впереди ничего себе?

 Третья минута: Лямбда выражения

  Если бы очень простую программу, добавить несколько делегатов ключевое слово, этот код собирается стать эзотерические, эзотерические вещи, что люди, которые понимают меньше, так что это также может быть использован в качестве повышения разменной монетой. Но философия дизайна от Microsoft из C # прост в использовании. Microsoft пытается упростить делегат (INT х, Int у) {возвращение х + у;} анонимные методы появились Lambda. Я вижу несколько ниже лямбда-выражения написано:

public partial class WebForm3 : System.Web.UI.Page

{

    public delegate int CalculatorAdd(int x, int y);

 

    protected void Page_Load(object sender, EventArgs e)

    {

        //方法一:

        CalculatorAdd cAdd1 = (int x, int y) => { return x + y; };

        int result1 = cAdd1(5, 6);

 

        //方法二:

        CalculatorAdd cAdd2 = (x, y) => { return x + y; };

        int result2 = cAdd2(5, 6);

 

        //方法三:

        CalculatorAdd cAdd3 = (x, y) => x + y;

        int result3 = cAdd2(5, 6);

    }

}

 Независимо от того или анонимные методы лямбда-выражений, завершил делегат приложения, не может избежать двух шагов, шаг заключается в определении делегата, еще один шаг, чтобы использовать метод для создания экземпляра делегата. Microsoft просто иметь этот двухступенчатый шаг синтеза идти. Func используется для упрощения определения делегата.

  Таким образом, приложение может делегировать с Func <Int, Int, Int> cAdd3 = (х, у) => х + у; это утверждение для завершения, которое называется родовым делегат Func.

 Пятая минута: дерево выражений

  На самом деле, выражение дерево не имеет никакого отношения с клиентом, что-то делать, то, так сказать, выражение дерево находится делегат контейнера. Если я должен сказать, что это более профессионально, лямбда-выражения Деревья выражений получают доступ к структуре данных. Лямбда-выражения, чтобы использовать, когда, непосредственно из выражения вне, Вкомпилировать () может быть использован непосредственно. Следующий код:

 

public partial class WebForm3 : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        Expression<Func<intintint>> exp = (x, y) => x + y;

        Func<intintint> fun = exp.Compile();

        int result = fun(2, 3);

    }

}

 

рекомендация

отwww.cnblogs.com/QueryWord/p/11302125.html