Csharp/CSharp Tutorial/Generic/Generic delegate
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>