泛型类/泛型委托示例

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



}

时间: 2024-08-01 16:44:06

泛型类/泛型委托示例的相关文章

如何使用.NET中的Action及Func泛型委托

委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递, 之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到 System.Delegate类的能力,System.Delegate类位于mscorlib.dll中,是.NET的基础核心类之一.使用 delegate关键字声明一个委托,实质上创建了System.Delega

C#动静结合编程之四:泛型委托

多态 多态是什么?一句话:接口和实现的1:n映射.多态让程序能通过统一的接口(广义的接口,意指规范 )调用不同的实现,从而增强程序的表达能力和灵活性.我们最为熟悉的多态形式是包括接口继承在内的 类型多态: var animals = new List<IAnimal>() { new Cat("Missy"), new Cat("Mr. Bojangles"), new Dog("Lassie") }; foreach (var an

泛型委托在项目中的应用

感悟:对泛型委托基本属于有点认识,但从来没真正在项目中使用过,有时感觉没有合适的场景应用,但看了artech兄的文章,我才明白,原来泛型委托真的可以做很多事情,而且效果往往是没有使用委托所达不到的. Action<T> 泛型委托:封装一个方法,该方法只采用一个参数并且不返回值.可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托.该方法必须与此委托定义的方法签名相对应.也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能返回值.当然泛型委托不只是只能支持一个参数,它最多可以支

使用.NET中的Action及Func泛型委托

原文 http://www.cnblogs.com/skm-blog/archive/2013/05/24/3096294.html   委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递, 之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到 System.Delegate类的能力,System.Delegate类位

Visual Studio 2010:泛型委托的协变、逆变Demo

在编程语言中,"协变"是指能够使用与原始指定的派生类型相比,派生程度 更大的类型."逆变"则是指能够使用派生程度更小的类型.在 .NET Framework 4 和 Visual Studio 2010 中,C# 和 Visual Basic 都支持在泛型接口和委托中 使用协变和逆变,并允许隐式转换泛型类型参数. 如果泛型接口或委托的泛型参数声明为协变或逆变,则将该泛型接口或委托称 为"变体".C# 和 Visual Basic 都允许您创建自己

C#委托基础5——泛型委托Action

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.本文参考自金旭亮老师的<.NET 4.0面向对象编程漫谈>有关代理的内容   为了方便开发,.NET基类库针对在实际开发中最常用的情形提供了几个预定义好的委托,这些预定义委托用得很广,比如在编写lambda表达式和开发并行计算程序时经常要用到他们 对于函数返回值为空的情形,可以使用Action泛型委托 class Program { // 对于函数返回值为空的情形,可以使用Action泛型委托 void Showst

C# 参考:令人惊喜的泛型委托 Predicate/Func/Action

Predicate 泛型委托   表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. 看看下面它的定义:     // Summary:    //     Represents the method that defines a set of criteria and determines whether    //     the specified object meets those criteria.   

表达式树和泛型委托

什么是表达式树? 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression).要想手动生成表达式树我们需要引用System.Linq.Expressions 命名空间,最重要的一个类是Expression,它是所有表达式的基类.例如: 1:参数表达式:ParameterExpression,就是一个方法中的参数,例如 search(string key),key可以看成是一个参数表达式. 2:二元表达式:BinaryExpre

C#委托基础4——泛型委托Func

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客. 为了方便开发,.NET基类库针对在实际开发中最常用的情形提供了几个预定义好的委托,这些预定义委托用得很广,比如在编写lambda表达式和开发并行计算程序时经常要用到他们.   预定义泛型委托Func class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return