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

}

}

}

C#拾遗系列(5):泛型委托相关推荐

  1. 七天学习计划_c#_[2][3][4][5]委托、事件、委托与事件的区别、泛型委托、Func\Action\predicate

    由于委托之前的博客已经详细写了,这里就简单的过一遍,复习一下: 了解委托 基于委托开发事件驱动程序变得非常简单. 使用委托可以大大简化多线程编程难度. 理解委托 委托也可以看做成一种数据类型,可以定义 ...

  2. 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托

    委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate).   声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...

  3. 泛型委托在项目中的应用

    Action<T> 泛型委托:封装一个方法,该方法只采用一个参数并且不返回值.可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托.该方法必须与此委托定义的方法签名相对应.也就是说 ...

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

    原文 http://www.cnblogs.com/skm-blog/archive/2013/05/24/3096294.html 委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象 ...

  5. 泛型委托 Predicate/Func/Action

    Predicate 泛型委托   表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. 看看下面它的定义: // Summ ...

  6. Func〈T, TResult〉 泛型委托 以及演变历程

    以下内容为菩提树下的杨过根据微软MSDN整理,转贴请注明出处   MSDN对于Func<T, TResult>)的官方解释: 封装一个具有一个参数并返回 TResult 参数指定的类型值的 ...

  7. C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法

    使用C#实现加减乘除算法经常被用作新手练习.本篇来分别体验通过委托.接口.匿名方法.泛型委托来实现. 使用委托实现 加减乘除拥有相同的参数个数.类型和返回类型,首先想到了使用委托实现. //创建一个委 ...

  8. 分别使用委托、接口、匿名方法、泛型委托实现加减乘除运算

    使用委托实现 加减乘除拥有相同的参数个数.类型和返回类型,首先想到了使用委托实现. //创建一个委托 public delegate decimal MathOperation(decimal lef ...

  9. 大白话系列之C#委托与事件讲解大结局

    今天是大白话系列之C#委托与事件讲解的大结局,也是我们最关心的,在日常的MES系统编程中到底怎样使用这样的利器,其实我们每天都在使用事件,一个窗体,一个按钮都包含这事件,只是很少用到自己写的委托和事件 ...

最新文章

  1. 解释大型网站js,css文件后面为什么有参数?
  2. 【caffe】使用draw_net绘制net结构
  3. optee应用程序中malloc函数的原理介绍
  4. DCMTK:读取DICOM图像,添加模态LUT并将其写回
  5. of介词短语作定语_介词短语用作状语/定语/表语/复合宾语
  6. 四十六 常用内建模块 itertools
  7. UVA - 10603 Fill(隐式图搜索)
  8. sql同时修改两个表的数据_如何用SQL做数据透视表?
  9. 我常用的那些 Git 命令
  10. 《简明python教程》沈洁元
  11. Gazbo下的无人车集群导航仿真
  12. 计算机网络线接法,电脑网线插座接法图文详解
  13. 计算机基础与应用答案,第4章 课后作业【含答案】 计算机基础与应用
  14. Linux操作系统安全(一)
  15. 如何定制B2C电商网站
  16. 代理服务器可能有问题,或地址不正确(已解决)
  17. 查找读者姓名mysql_练习1.sql · 刘友亮/mysql第三次作业 - Gitee.com
  18. 【进阶4-2期】Object.assign 原理及其实现
  19. 匿名软件竟成网络侵权避风港
  20. html中怎么固定一张图片大小,固定大小的div,不固定大小的图片如何放入div?

热门文章

  1. Win11如何禁用USB端口?禁用USB端口的方法
  2. python pip升级报错
  3. 数据挖掘与其商务智能上的应用的实验报告
  4. 怎么让电脑运行速度变快_加快电脑运行速度的6个秘笈,系统安装,电脑维修必备技巧...
  5. jmeter 导出聚合报告_使用Jmeter聚合报告生成对比图表
  6. python怎么发音乐到朋友圈_只要三步,用Python轻松制作短视频,你也能在朋友圈傲娇一把!...
  7. ❤️《微服务开发—Swagger》(建议收藏)
  8. 圆角边框(HTML、CSS)
  9. Open3d之文件IO
  10. centos 阿帕奇无法解析php_PHP之校园连接企业之路-2