Материал из .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);
}
}