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 { getset; }

                public string Message { getset; }

            }

            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/archive/2008/06/14/1221968.html如需转载请自行联系原作者


王德水

相关文章
|
10月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
131 6
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
197 11
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
323 7
|
C++ 安全 存储
C++智能指针解析
C++智能指针解析
172 0
C++智能指针解析
|
设计模式
结构型设计模式
结构型设计模式
160 0
结构型设计模式
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
185 4
C#中的委托(一)
C#中的委托(一)
C#||委托和事件的实例
C#||委托和事件的实例
|
5天前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
53 19
|
2月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
270 0