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日

相关文章

  • 如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件

    在上一篇文章(如何在 .NET Core WebApi 中处理 MultipartFormDataContent)中,我们有描述过如何以最简单的方式在 .NET Core WebApi 中处理 MultipartFormDataContent 。基于框架层面的封装,我们可以快速的从 Request.Form 中分别拿到文件内容和文本内容,但是这些默认的解析方…

    C# 2023年4月22日
    00
  • c#异步读取数据库与异步更新ui的代码实现

    你好,想要实现c#异步读取数据库并异步更新UI,可以采用以下步骤: 步骤一:建立异步的数据库连接 在c#中,可以使用SqlClient.SqlConnection类来建立数据库连接,并使用await关键字进行异步操作。具体代码如下: public async Task<SqlConnection> ConnectToDBAsync() { str…

    C# 2023年5月31日
    00
  • JS正则替换去空格的方法

    JS正则替换去空格的方法可以通过正则表达式的特性,通过匹配空格符并替换为空字符来实现。具体步骤如下: 使用正则表达式创建一个匹配空格的模式。空格包括空格符、制表符、换行符等。 javascript var regex = /\s+/g; 在这个例子中,使用 \s+ 来匹配一个或多个空格符,选用全局匹配模式 g,可以匹配整个文本。 通过 string.repl…

    C# 2023年6月8日
    00
  • C# Dictionary和SortedDictionary的简介

    C# Dictionary和SortedDictionary的简介 C#中的Dictionary和SortedDictionary都是用来存储键值对的数据结构,不同之处在于它们对数据的存储方式不同。 Dictionary Dictionary是一个散列表,使用哈希表存储键值对。在Dictionary中,键值对的键必须是唯一的,而值可以重复。下面是一个创建Di…

    C# 2023年6月7日
    00
  • WPF开发之实现一种三轴机械手控件

    WPF开发之实现一种三轴机械手控件,涉及到的技术栈有WPF、XAML、C#等。下面按照步骤来介绍实现这种控件的攻略。 一、设计控件的外观 首先我们需要考虑机械手控件的外观设计,我们可以使用WPF提供的绘图功能,来绘制出控件的外观,比如:机械臂的手臂、手掌、手指等。 在WPF开发中,我们设计控件的外观采用的是XAML,XAML是一种基于XML的标记语言,可以在…

    C# 2023年6月6日
    00
  • .NET使用YARP根据域名转发实现反向代理

    以下是“.NET使用YARP根据域名转发实现反向代理”的完整攻略: 什么是YARP YARP(Yet Another Reverse Proxy)是一个开源的反向代理组件由微软开发。它是一个轻量级、高性能、可扩展的反向代理组件,可以用于构建高性能的服务网关、API网关等。 YARP的特性 YARP具有以下特性: 支持HTTP、HTTPS、WebSocket等…

    C# 2023年5月12日
    00
  • asp.net页面中如何获取Excel表的内容

    获取Excel表的内容,需要使用相关的类库和方法。在ASP.NET页面中,一般可以通过以下步骤来获取Excel表的内容: 1.导入相关命名空间和类库 首先需要在代码文件的开头导入相关命名空间和类库,包括: using System.Data; using System.Data.OleDb; 其中,System.Data提供了数据库操作的相关类,而Syste…

    C# 2023年6月6日
    00
  • 非常实用的C#字符串操作处理类StringHelper.cs

    我们来详细讲解一下C#字符串操作处理类StringHelper.cs。 一、概述 StringHelper.cs是一个字符串操作类,主要提供了一些常见的字符串操作方法。这些方法包括截取字符串、判断字符串是否为空、去除字符串中的空格等。 二、类中方法的介绍 下面我们来分别介绍该类中的方法。 1. IsNullOrEmpty public static bool…

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