2013-11-27 5 views
-2

Я прочитал это ниже код, который принимает Action<T> and returns Action<T>Что такое использование действий <T>

private static Action<HttpContext> WrapCallback(Action<HttpContextBase> callback) 
{ 
     if (callback != null) 
     { 
      return delegate(HttpContext context) 
      { 
       callback(new HttpContextWrapper(context)); 
      } 
      ; 
     } 
     return null; 
    } 

What is the use of returning Action<T> вместо типов ноу как объект, строки и т.д. Я не понимаю, как он может быть использован в программах. Любые сценарии/пример пожалуйста

+2

Для начала, см http://en.wikipedia.org/wiki/First-class_function и http://en.wikipedia.org/wiki/Higher-order_function – Ani

+1

'' Action известный тип, точно так же, как объект, строка и т. д. – Chris

+2

MSDN - ваш друг: http://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx – Bidou

ответ

2

Для вас пример, который вы можете сделать, как этот

обратного вызова функции

public void ActFunction(int a) 
     { 
     } 

код для вызова

Action<int> act = new Action<int>(aActFunction); 
WrapCallback(act); 

Действие вместо этого функция вам хочу перейти на WrapCallback

это функция

public class ActionDemo 
{ 
    public void ActFunction(int a) 
    { 
    } 
    public void ActFunction1() 
    { 
    } 

    static void Main() 
    { 
     ActionDemo ad = new ActionDemo(); 


     Action act1 = new Action(ad.ActFunction1); 
     act1();  
     Action<int> act = new Action<int>(ad.ActFunction); 
     act(); 
    } 
} 

подробнее об этом в этом В комплекте блоге: http://pranayamr.blogspot.no/2012/08/delegate-and-action-and-func-and-lamda.html

+0

Но я не понимаю, что делает код и почему он сконструирован в запутанном виде. Непонятно для меня :( – Billa

+1

@Billa вам нужно будет спросить человека, который написал этот код для * why *. – Stijn

+0

Отсутствует параметр int для 'act1()' – qujck

2

В принципе, что это эквивалентно созданию лямбда вручную;

Action<HttpContext> callback1 = WrapCallback(DoSomething); 
Action<HttpContext> callback2 = x => DoSomething(new HttpContextWrapper(x)); 

Другими словами, она оборачивает функции, заданной в качестве аргумента внутри другой функции и возвращает новую функцию.

Новая функция - при вызове - обертывает параметр HttpContext внутри HttpContextWrapper и вызывает с ним исходную функцию.

Смежные вопросы