Csharp/CSharp Tutorial/Generic/Generic delegate

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

A generic delegate.

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")); 
  }  
}
3
Hello

Generic Delegate

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);
    }
  }