Csharp/CSharp Tutorial/Generic/Generic delegate

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

A generic delegate.

<source lang="csharp">using System;

delegate T SomeOp<T>(T v);

class MainClass {

 static int sum(int v) { 
   return v; 
 } 

 static string reflect(string str) { 
   return str; 
 } 
     
 public static void Main() {   
   SomeOp<int> intDel = sum;  
   Console.WriteLine(intDel(3)); 

   SomeOp<string> strDel = reflect;  
   Console.WriteLine(strDel("Hello")); 
 }  

}</source>

3
Hello

Generic Delegate

<source lang="csharp">using System; using System.Collections.Generic; using System.Text;

 public delegate void MyGenericDelegate<T>(T arg);
 public delegate void MyDelegate(object arg);
 class Program
 {
   static void Main(string[] args)
   {
     MyDelegate d = new MyDelegate(MyTarget);
     d("string");
     MyDelegate d2 = new MyDelegate(MyTarget);
     d2(1);
     MyGenericDelegate<string> strTarget = new MyGenericDelegate<string>(StringTarget);
     strTarget("str");
     MyGenericDelegate<int> intTarget = IntTarget;
     intTarget(9);
   }
   static void MyTarget(object arg)
   {
     if(arg is int)
     {
       int i = (int)arg;
       Console.WriteLine("++arg is: {0}", ++i);
     }
     if(arg is string)
     {
       string s = (string)arg;
       Console.WriteLine("arg in uppercase is: {0}", s.ToUpper());
     }
   }
   static void StringTarget(string arg)
   {
     Console.WriteLine("arg in uppercase is: {0}", arg.ToUpper());
   }
   static void IntTarget(int arg)
   {
     Console.WriteLine("++arg is: {0}", ++arg);
   }
 }</source>