c# in depth的泛型实现实例代码

下面是关于"c#InDepth的泛型实现实例代码"的完整攻略。

1. 什么是c#InDepth?

c#InDepth 是一本经典的 c# 高级编程书籍,由 Jon Skeet 所著。该书有关于泛型编程的讲解以及有许多泛型相关的实例代码。这些代码是泛型编程的经典案例,非常值得学习和掌握。

2. 泛型实现的实例代码

2.1 泛型列表实现

public class GenericList<T>
{
    private class Node
    {
        public Node(T t)
        {
            Next = null;
            Data = t;
        }

        public Node Next { get; set; }
        public T Data { get; set; }
    }

    private Node head;

    public void AddHead(T t)
    {
        Node n = new Node(t);
        n.Next = head;
        head = n;
    }

    public IEnumerator<T> GetEnumerator()
    {
        Node current = head;

        while (current != null)
        {
            yield return current.Data;
            current = current.Next;
        }
    }
}

以上是一个泛型列表的实现,使用了内部的私有类 Node 来表示列表的节点。AddHead() 方法用于向列表头部添加元素,GetEnumerator() 方法则返回一个枚举器,可以使用 foreach 循环遍历列表中的元素。下面是一个使用实例。

static void Main(string[] args)
{
    GenericList<int> list = new GenericList<int>();
    for (int i = 0; i < 10; i++)
    {
        list.AddHead(i);
    }

    foreach (int i in list)
    {
        Console.Write(i + " ");
    }
}

程序输出:9 8 7 6 5 4 3 2 1 0

2.2 泛型栈的实现

public class GenericStack<T>
{
    private int size;
    private T[] items;

    public GenericStack()
    {
        items = new T[10];
        size = 0;
    }

    public void Push(T item)
    {
        if (size == items.Length)
        {
            T[] tmp = new T[items.Length * 2];
            for (int i = 0; i < items.Length; i++)
            {
                tmp[i] = items[i];
            }

            items = tmp;
        }

        items[size++] = item;
    }

    public T Pop()
    {
        if (size == 0)
        {
            throw new InvalidOperationException();
        }

        T item = items[--size];
        items[size] = default(T);
        return item;
    }
}

以上是一个泛型栈的实现。Push() 方法用于向栈中压入元素,Pop() 方法用于从栈中弹出元素。如果栈已满,Push() 方法将会扩展栈的大小。下面是一个使用实例。

static void Main(string[] args)
{
    GenericStack<int> myStack = new GenericStack<int>();
    myStack.Push(1);
    myStack.Push(2);
    myStack.Push(3);
    Console.WriteLine(myStack.Pop()); //输出:3
    Console.WriteLine(myStack.Pop()); //输出:2
    Console.WriteLine(myStack.Pop()); //输出:1
}

以上就是两个泛型实现的示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# in depth的泛型实现实例代码 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • asp.net FindControl方法误区和解析

    ASP.NET是一个强大的Web应用程序框架,其控件的使用使得我们能够快速地创建并部署Web应用程序。FindControl方法是ASP.NET中常用的一个方法,它被用于在Web应用程序中查找控件的引用。 然而,在使用FindControl方法时,可能会存在一些误区和需要解析的问题。在本篇文章中,我们将探讨如何正确地使用FindControl方法,并且通过细…

    C# 2023年6月3日
    00
  • C#并发容器之ConcurrentDictionary与普通Dictionary带锁性能详解

    C#并发容器之ConcurrentDictionary与普通Dictionary带锁性能详解 引言 在多线程编程中,确保线程安全是至关重要的。在实现线程安全的过程中,我们可以使用锁、互斥量等同步机制。而在 .NET Framework 4 中,引入了一些并发容器,例如ConcurrentDictionary,可以帮助我们更方便地实现线程安全。那么,在使用Co…

    C# 2023年6月1日
    00
  • C#中参数数组、引用参数和输出参数示例详解

    C#中参数数组、引用参数和输出参数示例详解 在C#中,函数的参数既可以是值类型,也可以是引用类型。同时C#还提供了参数数组、引用参数和输出参数以满足不同的需求。 参数数组 在函数定义时,可以定义参数数组,这样在调用该函数时可以传递不确定数量的参数,下面是一个示例: public static int Sum(params int[] numbers) { i…

    C# 2023年6月7日
    00
  • VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解 在开发过程中,我们往往需要将自己开发的程序打包部署,让其他人可以方便地安装和使用我们的程序。本攻略将介绍如何使用 VS2012 打包部署程序。下面将详细讲述打包部署程序的步骤。 1.在 Visual Studio 中创建安装程序项目 打开 Visual Studio,点击“文件”–>“新建”–>“项目”,在…

    C# 2023年6月3日
    00
  • C#可以减少或不使用switch有什么方法

    使用C#语言时,我们常常需要使用switch语句来对某一个变量的不同取值进行判断并执行对应的代码。但是使用switch语句存在一些局限性,如: switch语句仅支持整数、字符和枚举类型的判断,无法使用字符串等其他类型的数据进行判断。 switch语句存在层次嵌套时,可能会影响代码的可读性和可维护性。 为了避免使用switch语句带来的这些问题,C#提供了一…

    C# 2023年6月7日
    00
  • .NET  Visual Studio 代码性能分析工具

    下面是关于“.NET Visual Studio代码性能分析工具”的完整攻略,包含两个示例。 1. Visual Studio代码性能分析工具简介 Visual Studio代码性能分析工具是一种用于分析和优化.NET应用程序性能的工具。它可以帮助开发人员识别和解决应用程序中的性能问题,例如内存泄漏、高CPU使用率和长时间的响应时间等。 2. 使用Visua…

    C# 2023年5月15日
    00
  • .NET6使WebApi获取访问者IP地址

    .NET 6 Web API 获取访问者 IP 地址攻略 在 .NET 6 Web API 中,可以通过一些方法获取访问者的 IP 地址。本攻略将介绍如何使用这些方法来获取访问者的 IP 地址。 步骤 步骤1:创建一个新的 .NET 6 Web API 项目 首先,我们需要创建一个新的 .NET 6 Web API 项目。可以使用以下命令在命令行中创建一个新…

    C# 2023年5月17日
    00
  • c#同步两个子目录文件示例分享 两个文件夹同步

    来讲解一下”C#同步两个子目录文件”以及”两个文件夹同步”的攻略。 I. 问题背景 我们的应用程序通常需要处理本地文件,并且在不同的设备之间进行同步和备份。 如果我们有一个目录,其中包含许多文件和子目录,我们可能需要将该目录以及它的所有内容复制到另一个位置以进行备份。 在这种情况下,我们需要一种可靠的方法来同步这两个目录,在一个目录中的任何更改都应反映在另一…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部