using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;
namespace DeletegateT
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyClass<string, string> _MyClass = new MyClass<string, string>();//实例化泛型类MyClass
_MyClass._MyDelegate = new MyDelegate<string, string>(DemoMethod);//实例化_MyClass的泛型委托
MessageBox.Show(_MyClass.GetValues("Jimmy's Book","Jimmy"));//此时编译器已经能确定参数的类型为String,进而通过委托调用泛型方法DemoMethod
_MyClass._MyEvent += new MyEvent<string, string>(DemoEvent<string, string>);//给_MyClass订阅一个事件
_MyClass.InvokeEvent("Jimmy", "China");//激发事件
}
//定义有返回值的委托
public delegate string MyDelegate<T, S>(T title, S author);
//定义事件委托。
public delegate void MyEvent<E, P>(E Name, P Address);
public class MyClass<V, F>
{
//声明委托
public MyDelegate<V, F> _MyDelegate;
//声明事件委托
public event MyEvent<V, F> _MyEvent = null;
public string GetValues(V title, F author)
{
//调用委托
return _MyDelegate(title, author);
}
public MyClass()
{
}
public void InvokeEvent(V name, F address)
{
if (_MyEvent != null)
{
//调用委托
_MyEvent(name, address);
}
}
}
public string DemoMethod<T, S>(T title, S author)
{
return title.ToString() + " ,Author:" + author;
}
private void DemoEvent<V, F>(V name, F address)
{
MessageBox.Show(name + " come from " + address);
}
}
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章