C#拾遗系列(5):泛型委托

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace NetTest

{

    //泛型委托   

    class TestGenericDelegate

    {

        public delegate void StackEventHandler<T, U>(T sender, U eventArgs);

        class Stack<T>

        {

            /*

            在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:

            T 是引用类型还是值类型。

            如果 T 为值类型,则它是数值还是结构

            给定参数化类型 T 的一个变量 t,只有当 T 为引用类型时,语句 t = null 才有效;只有当 T 为数值类型而不是结构时,语句 t = 0 才能正常使用。

            解决方案是使用 default 关键字,此关键字对于引用类型会返回 null,对于数值类型会返回零。

            对于结构,此关键字将返回初始化为零或 null 的每个结构成员,具体取决于这些结构是值类型还是引用类型

            */

            public T getName()

            {

                T temp = default(T);

                return temp;

            }

            public class StackEventArgs : EventArgs

            {

                public string Name { get; set; }

                public string Message { get; set; }

            }

            public event StackEventHandler<Stack<T>, StackEventArgs> stackEvents;

 

            public void StackChange()

            {

                StackEventArgs s = new Stack<T>.StackEventArgs();

                s.Name = "jack";

                s.Message = "Better Man";

                OnStackChanged(s);

            }

 

            protected virtual void OnStackChanged(StackEventArgs e)

            {

                stackEvents(this, e);

            }

        }

        class SampleClass

        {

            public void HandleStackChange<T>(Stack<T> stack, Stack<T>.StackEventArgs args)

            {

                Console.Out.WriteLine(args.Message + "," + args.Name);

            }

        }

        public void Test()

        {

            Stack<double> s = new Stack<double>();

            SampleClass o = new SampleClass();

            s.stackEvents += o.HandleStackChange;

            s.StackChange();

            Console.Out.WriteLine(s.getName());

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值