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如需转载请自行联系原作者


王德水

相关文章
|
22天前
|
C#
C#拾遗补漏之goto跳转语句
在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺点。
|
4月前
|
存储 安全 编译器
C# 11.0中的泛型属性:类型安全的新篇章
【1月更文挑战第23天】C# 11.0引入了泛型属性的概念,这一新特性为开发者提供了更高级别的类型安全性和灵活性。本文将详细探讨C# 11.0中泛型属性的工作原理、使用场景以及它们对现有编程模式的改进。通过深入了解泛型属性,开发者将能够编写更加健壮、可维护的代码,并充分利用C#语言的最新发展。
|
8月前
|
存储 算法 安全
C#三十二 泛型的理解和使用
C#三十二 泛型的理解和使用
21 0
|
22天前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。
|
2月前
|
存储 安全 Java
34.C#:listT泛型集合
34.C#:listT泛型集合
18 1
|
2月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
159 2
|
4月前
|
存储 安全 算法
C# 泛型:类型参数化的强大工具
【1月更文挑战第7天】本文将深入探讨C#语言中的泛型编程,包括泛型的定义、用途、优势以及实际应用。通过类型参数化,泛型允许开发者编写更加灵活且可重用的代码,同时提高程序的类型安全性和性能。本文将通过示例代码和详细解释,帮助读者更好地理解泛型在C#中的重要性和实用性。
|
4月前
|
存储 C# C++
C#进阶-委托(Delegrate)
类似于 C 或 C++ 中函数的指针,委托是C#的函数指针,是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。本篇文章我们将讲解C#里委托的类型及如何使用。委托的语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
27 0
|
5月前
|
Java C# C++
【从Java转C#】第八章:委托、lambda、事件
【从Java转C#】第八章:委托、lambda、事件