Dirección original:
https://cloud.tencent.com/developer/article/1335104
1, el uso de Func (método de encapsulación, pasar parámetros, valor de retorno)
Func <en T1, T2, ..., fuera TResult> (T1, T2, ...)
Un método de envasado que tiene (0/1/2/3 ... 16) parámetros , y devuelve el valor del tipo especificado por el parámetro TResult.
pública estática sin efecto la Principal () { // Método a: sistema equivalente construido Func delegado Func < int , int , cadena > Método = el Calcular; // Método dos: Lambda implementado llamada a un método, más simple Func < int , int , Cadena > método - 1 = (X, Y) => { int Val = X + Y; retorno de cuerdas .formato ( "el PLUS el Calcular {{0}} 1 resultado es: {2} " , X, Y, Val); }; Console.WriteLine (método (3 , 5 )); Console.WriteLine (method_1 ( 10 , 18 )); Console.ReadLine (); } Pública estática cadena Calcular ( int x, int y) { int val = x + y; retorno cadena .formato ( " el calculo {0} más {1} resultado es: {2} " , x, y, val); }
2, Acción de uso (un método de envasado, paso de parámetros y vuelve sin valor)
Acción <T1, T2, T3, ...> (T1, T2, T3 ...)
Un método de envasado que entrante (0/1/2 ...) parámetros y no devuelve ningún valor.
pública estática vacío Principal () { Method_First ( " Hola, aquí! " ); Method_First ( " Hola, No! " ); Console.ReadLine (); } Privada estática vacío Method_First ( cadena y) { Acción < string > método; método = x => {Console.WriteLine ( " el mensaje de entrada es: {0} " , x); }; método (y); } privada estático void Method_Sec ( cadena y) { Acción < cadena > method = x => {Console.WriteLine ( " el mensaje de entrada es: {0} " , x); }; método (y); }
3. El uso de delegado
Dijo a encargado dos situaciones diferentes, a continuación, cuándo usarlo encargó?
De acuerdo a los documentos oficiales, en las siguientes situaciones, por favor utilice la comisión:
- Cuando el patrón de diseño de eventos.
- Cuando el método de envasado preferiblemente estática.
- Otras propiedades del objeto cuando la persona que llama no necesitan tener acceso a la realización del método, un método o una interfaz.
- Tenemos que facilitar la combinación.
- Cuando puede ser necesaria una pluralidad de clases para implementar el método.
4. Utilice la delegación de tareas
Tarea representa una operación asíncrona.
pública estática vacío Principal () { // 启动方法1 Tarea t = Task.Run (() => { Thread.Sleep ( 1000 ); Console.WriteLine ( " Primera tarea de tiempo de acabado es: {0} " , DateTime.Now .ToString ()); }); // 方法2 Tarea t_2 = Task.Factory.StartNew (() => { Thread.Sleep ( 2000 ); Console.WriteLine ( " segunda tarea vez terminado es: {0} " , DateTime.Now.ToString ()); }); // 方法3 acción Action = () => { Thread.Sleep ( 3000 ); Console.WriteLine ( " tercera tarea vez terminado es: {0} " , DateTime.Now.ToString ()); }; Task.Factory.StartNew (acción) .ContinueWith (thirdTask => { si (thirdTask.IsCompleted) { Console.WriteLine ( " la tercera tarea ha terminado " ); } demás si (thirdTask.IsFaulted) { Console.WriteLine (thirdTask.Exception); } }); Console.WriteLine ( " hilo principal tiene final: {0} " , DateTime.Now.ToString ()); Console.ReadKey (); }
Los resultados son los siguientes:
hilo principal tiene final: 03/04/2018 22:03:39
La primera tarea vez terminado es: 03/04/2018 22:03:40
La segunda tarea es el tiempo final: 03/04/2018 22:03:41
tercera tarea el tiempo final es: 03/04/2018 22:03:42
La tercera tarea ha terminado