zoukankan      html  css  js  c++  java
  • 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());

            }

        }

    }

    扫码关注公众号,了解更多管理,见识,育儿等内容

    作者: 王德水
    出处:http://www.cnblogs.com/cnblogsfans
    版权:本文版权归作者所有,转载需经作者同意。

  • 相关阅读:
    springboot—spring aop 实现系统操作日志记录存储到数据库
    排名前16的Java工具类
    SpringBoot集成JWT实现token验证
    使用jQuery实现图片懒加载原理
    Spring主从数据库的配置和动态数据源切换原理
    使用Nginx过滤网络爬虫
    Java io.netty.util.ReferenceCountUtil 代码实例
    Netty系列之Netty百万级推送服务设计要点
    Java给图片和PDF文件添加水印(图片水印和文字水印)
    【TortoiseSVN】windows中连接SVN服务器的工具
  • 原文地址:https://www.cnblogs.com/cnblogsfans/p/1221968.html
Copyright © 2011-2022 走看看