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日

相关文章

  • Unity实现物体弧线运动到规定的坐标

    Unity实现物体弧线运动到规定的坐标的完整攻略需要涉及以下几个步骤: 1. 生成弧线路径 首先需要生成一条弧线路径,用于指导物体运动。可以使用Unity中的Path Creator插件来生成弧线路径。具体操作如下: 在Unity Asset Store中搜索Path Creator插件,下载并导入到项目中。 在场景中创建空对象,然后添加Path Creat…

    C# 2023年6月3日
    00
  • ASP.NET Core获取正确查询字符串参数示例

    标题:ASP.NET Core获取正确查询字符串参数示例 前言: 在Web应用程序中,查询字符串是一种常用的传递参数的方式。然而在ASP.NET Core中,获取查询字符串时需要特别注意一些情况,否则就可能出现获取不到参数值或者获取到错误参数值的问题。本文将详细讲解ASP.NET Core获取正确查询字符串参数的示例。 一、在Controller中获取查询字…

    C# 2023年6月3日
    00
  • c# 委托的常见用法

    c# 委托的常见用法 委托的基本概念 C#中,委托是一个类,它允许将方法作为参数传递给另一个方法,或者将方法存储在字段或属性中,以便稍后调用。委托是一种语言结构,它允许我们使代码更加模块化,并提高代码的可读性。 委托的声明 使用一个 delegate 关键字即可声明一个委托类型,委托类的名称有一定规范,通常以 Func 或 Action 开头,后接参数和返回…

    C# 2023年6月7日
    00
  • C#连接mariadb(MYSQL分支)代码示例分享

    下面我将为您详细讲解“C#连接mariadb(MYSQL分支)代码示例分享”的完整攻略。 一、准备工作 在连接 mariadb 前需要先安装 mariadb 的 C# 驱动,如下所示: PM> Install-Package MySql.Data 二、连接 mariadb 数据库 通过以下代码示例,我们可以使用 C# 连接 mariadb 数据库: s…

    C# 2023年6月2日
    00
  • 在Linux中安装ASPNET.Core3.0运行时的示例代码

    在Linux中安装ASP.NET Core 3.0运行时的示例代码 在本文中,我们将详细讲解如何在Linux中安装ASP.NET Core 3.0运行时,并提供两个示例说明。 准备工作 在开始之前,您需要安装以下软件: Linux操作系统(本文以Ubuntu 18.04为例) .NET Core 3.0 SDK 安装ASP.NET Core 3.0运行时 添…

    C# 2023年5月16日
    00
  • C# 动态输出Dos命令执行结果的实例(附源码)

    下面是对主题“C# 动态输出Dos命令执行结果的实例(附源码)”的详细讲解攻略。 1. 背景介绍 在C#中执行DOS命令并输出执行结果,通常采用Process类来实现。但如果要及时输出命令执行结果,我们需要借助于StandardOutput和BeginOutputReadLine两个属性和方法。 2. 具体步骤 2.1 创建Process实例 首先,我们需要…

    C# 2023年6月7日
    00
  • C#动态加载dll扩展系统功能的方法

    我会详细讲解“C#动态加载dll扩展系统功能的方法”的完整攻略。首先,我们需要了解何时需要动态加载dll文件。在某些情况下,我们可能需要扩展我们的应用程序的功能或根据用户需求加载插件。这时候,我们可以使用动态加载dll文件的方法来实现。下面我会详细介绍C#动态加载dll扩展系统功能的方法,并提供两个示例说明。 1. 解析dll与加载dll dll文件是由各种…

    C# 2023年6月7日
    00
  • C#检查键盘大小写锁定状态的方法

    下面是C#检查键盘大小写锁定状态的方法的完整攻略。 问题背景 在开发应用程序的过程中,有时需要检查当时键盘的大小写锁定状态。例如,当你需要获取用户键入的字母时,如果键盘处于大写状态,那么你需要将其转换为小写,否则你可能无法正确进行后续的操作。因此,检查键盘大小写锁定状态是应用程序开发过程中的一个非常重要的问题。 检查键盘大小写状态的方法 在 C# 中,我们可…

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