`
wangdeshui
  • 浏览: 255723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

        }

    }

}

分享到:
评论

相关推荐

    C++设计新思维:泛型编程与设计模式之应用.pdf 带目录书签

    C++设计新思维:泛型编程与设计模式之应用.pdf 带目录书签

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    委托在C#中相当于函数指针,而泛型委托允许我们传递具有不同参数类型的委托。一个常见的例子是`Func, TResult&gt;`和`Action&lt;T&gt;`,它们分别表示带有一个输入参数并返回结果的委托和不返回结果的委托。以下示例展示了...

    C#2.0 锐利体验系列课程(1):泛型编程

    《C#2.0 锐利体验系列课程(1):泛型编程》是一门针对C#编程语言的进阶课程,旨在深入讲解C#2.0中的泛型概念及其应用。泛型是.NET框架中的一项重要特性,它极大地提高了代码的重用性和类型安全性,减少了类型转换的...

    c#泛型类、泛型方法、泛型接口、泛型委托

    在C#编程语言中,泛型是一个强大的特性,它允许我们编写可重用的代码,同时保持类型安全和性能。泛型主要分为四个关键部分:泛型类、泛型方法、泛型接口和泛型委托。下面将详细介绍这四个方面。 1. 泛型类: 泛型类...

    C++设计新思维:泛型编程与设计模式之应用(PDF)

    《C++设计新思维:泛型编程与设计模式之应用》是一本深入探讨C++编程技术的著作,尤其强调了泛型编程和设计模式在实际软件开发中的应用。作者通过丰富的实例和深入的分析,引领读者理解并掌握C++的核心理念和高级...

    C# 泛型委托示例 应用解析

    这是一个泛型委托的示例,主要是让初学者了解泛型委托的用法,虽然很简单,但是代码有注释,我的这个例子是在vs2010中做的,用vs08的朋友们,最好还是转一下,但是绝对能实现(本程序是控制台应用程序,适合初学者)...

    C++ 设计新思维:泛型编程与设计模式之应用

    C++ 设计新思维:泛型编程与设计模式之应用C++ 设计新思维:泛型编程与设计模式之应用C++ 设计新思维:泛型编程与设计模式之应用C++ 设计新思维:泛型编程与设计模式之应用C++ 设计新思维:泛型编程与设计模式之应用

    很强大的泛型委托实例

    5. **泛型委托与LINQ**:在 LINQ(Language Integrated Query)表达式中,泛型委托扮演着重要角色,使得我们能够对各种数据源执行通用的操作。 6. **性能优化**:由于泛型委托可以减少装箱和拆箱操作,因此在某些...

    委托例子:自定义委托,泛型委托,多播委托,

    本示例是基于VS2015编译环境,主要展示了自定义委托、泛型委托以及多播委托的使用。 **一、自定义委托** 自定义委托允许我们创建符合特定签名的委托类型。首先,我们需要定义一个委托类,它声明了委托可以处理的...

    C# 代理 委托 事件 反射.pdf

    在C#中,泛型委托是一种非常有用的特性,它允许我们创建能够处理多种数据类型的委托。通过泛型委托,开发者可以在不重复代码的情况下实现对不同类型的处理。 **泛型委托的基本概念** 泛型委托的核心思想是“泛型...

    第24讲:泛型实例(C#视频教程 + C#源代码)专业课程管理模块实现.zip

    [第24讲:泛型实例(C#视频教程 + C#源代码)专业课程管理模块实现.zip] 根据【田洪川 天轰穿 C#视频教程】的【第24讲:泛型实例】实现,VS2010编译运行正常。 源代码与视频教程中略有不同! 本人不是天轰穿,在此对...

    泛型+反射:泛型 笔记 ,课后作业

    泛型+反射:泛型 笔记 ,课后作业

    VC++ 2005:泛型编程

    【VC++ 2005:泛型编程】 泛型编程是C++/CLI中的一种重要特性,允许程序员创建可重用的代码,这些代码能够处理多种数据类型,而无需每次都复制和修改代码。泛型编程的核心思想是参数化类型,即将数据类型作为一个...

    C#泛型 调研报告 C#泛型

    - **类型擦除**:C#泛型使用了一种称为类型擦除的技术,在编译后,所有的类型参数被替换为其实际类型,生成的IL代码中没有类型参数的概念,只有具体的类型。 - **类型约束**:在定义泛型时,可以添加类型约束,如...

    VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程_第23讲:泛型入门

    5. **泛型委托和事件**:泛型也可以应用于委托和事件,增加代码的灵活性。 6. **泛型的继承与多态**:泛型类可以作为其他类的基础,实现多态性。 7. **泛型集合的扩展方法**:如LINQ中的`Enumerable&lt;T&gt;`和`...

    VC++ 2005系列课程(7):泛型编程

    在VC++ 2005中,泛型编程是C++编程语言的一项重要特性,它引入了类似C#和Java中的泛型概念,使得程序员可以编写更加通用和高效的代码。泛型编程允许创建不依赖于特定数据类型的代码模板,从而实现代码重用并提高性能...

    C#泛型集合与非泛型集合

    ### C# 泛型集合与非泛型集合详解 #### 一、概述 在.NET Framework Class Library (FCL) 中,提供了丰富的集合类型,这些集合类型是编程中不可或缺的工具。根据是否支持泛型特性,这些集合大致可以分为两类:泛型...

    C#源代码-泛型委托.zip

    5. **策略模式实现**:利用泛型和委托实现策略模式,允许在运行时动态改变算法的行为。 6. **LINQ和泛型委托**:展示如何结合C#的Language Integrated Query (LINQ)语法和泛型委托进行数据查询和转换。 通过学习和...

    C# 泛型 C# 泛型

    6. **泛型集合**:C#的System.Collections.Generic命名空间提供了许多泛型集合,如List、Dictionary, TValue&gt;、Queue和Stack等。这些集合比非泛型版本更安全,因为它们在编译时就进行了类型检查,减少了运行时的错误...

Global site tag (gtag.js) - Google Analytics