C#基础之泛型

C#基础之泛型

什么是泛型

在C#中,泛型即“参数化类型”,即对数据类型进行参数化,使得能够在类型安全的前提下对不同的数据类型进行通用的操作。用一句话来概括就是,泛型即类型参数化。

泛型具有以下特点:

  • 可以避免类型强转的问题。
  • 提供更高效的代码复用,避免了针对不同类型创建不同版本的代码的问题。
  • 增加代码可读性,因为泛型可以让我们不需要在代码中反复使用Object类型。

泛型的语法

泛型的语法如下所示:

class 类名<类型形参>
{
    // 类的成员
}

其中,类型形参用来代替实际的数据类型。

泛型类

定义泛型类的语法如下所示:

class 类名<T>
{
    private T[] arr;
    // 其他成员
}

其中,T即为类型形参,代表了要使用的数据类型。

使用泛型类时,需要指定实际的数据类型,如下所示:

MyClass<int> myClass = new MyClass<int>();

上述代码中,<int>表示将泛型类的类型形参T替换为int类型。

以下是一个完整的示例:

class MyGenericClass<T>
{
    private T[] arr;

    public MyGenericClass(int size)
    {
        arr = new T[size];
    }

    public T GetItem(int index)
    {
        return arr[index];
    }

    public void SetItem(int index, T value)
    {
        arr[index] = value;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 使用泛型类来创建一个int数组
        MyGenericClass<int> intArr = new MyGenericClass<int>(5);

        // 设置数组元素的值
        intArr.SetItem(0, 1);
        intArr.SetItem(1, 2);
        intArr.SetItem(2, 3);
        intArr.SetItem(3, 4);
        intArr.SetItem(4, 5);

        // 获取数组元素的值
        Console.WriteLine(intArr.GetItem(0));    // 输出:1
        Console.WriteLine(intArr.GetItem(1));    // 输出:2
        Console.WriteLine(intArr.GetItem(2));    // 输出:3
        Console.WriteLine(intArr.GetItem(3));    // 输出:4
        Console.WriteLine(intArr.GetItem(4));    // 输出:5
    }
}

以上代码中,MyGenericClass<T>是一个泛型类,T为类型形参。在Main()方法中,使用MyGenericClass<int>来创建一个int类型的数组,实现了对int类型数组的读写操作。

泛型方法

定义泛型方法的语法如下所示:

返回类型 函数名<类型形参>(参数列表)
{
    // 函数实现
}

其中,类型形参用来代替实际的数据类型。

例如,以下代码中的T即为类型形参:

public static T Max<T>(T a, T b)
{
    return a > b ? a : b;
}

使用泛型方法时,需要在函数名称前加上类型参数,如下所示:

int max = Max<int>(3, 5);

上述代码中,<int>表示将类型形参T替换为int类型。

以下是一个完整的示例:

class Program
{
    static void Main(string[] args)
    {
        // 使用泛型方法找到两个整数中的最大值
        int max = Max<int>(3, 5);
        Console.WriteLine(max);    // 输出:5

        // 使用泛型方法找到两个浮点数中的最大值
        double max2 = Max<double>(3.14, 5.68);
        Console.WriteLine(max2);    // 输出:5.68
    }

    public static T Max<T>(T a, T b) where T : IComparable
    {
        return a.CompareTo(b) > 0 ? a : b;
    }
}

以上代码中,Max<T>是一个泛型方法,T为类型形参。在主函数中,使用Max<int>Max<double>分别找到了两个整数和两个浮点数中的最大值。注意,为了使用CompareTo()方法对两个数据进行比较,需要在Max<T>函数上增加一个类型约束where T : IComparable

总结

泛型是C#中十分重要的一种语言特性,能够避免类型强转的问题,提高代码的实用性和可读性。在使用泛型时,需要注意类型参数的指定和类型约束的处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基础之泛型 - Python技术站

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

相关文章

  • C#读写文件的方法汇总

    C#读写文件的方法汇总 在C#编程中,读写文件是一项非常常见的操作。本文将介绍C#语言中常用的文件读写方法。 1. FileStream类 FileStream是.NET Framework中用于读取、写入和操作文件的类。以下是使用FileStream类进行文件读写的示例代码: 读取文件 string path = @"C:\test.txt&qu…

    C# 2023年5月31日
    00
  • C#数组应用分析第2/2页

    C#数组应用分析攻略 什么是数组 数组是一种数据结构,它是相同数据类型的一组元素的集合。数组中的元素通过使用数组下标进行访问。C#中的数组是由系统分配的内存块。数组中的元素在内存中是连续排列的。 数组的声明 在C#中,可以通过以下方式声明一个数组: // 声明一个int类型的数组,长度为4 int[] numbers = new int[4]{1, 2, 3…

    C# 2023年6月3日
    00
  • ASP.NET从字符串中查找字符出现次数的具体实现方法

    下面我将为你详细讲解ASP.NET从字符串中查找字符出现次数的具体实现方法。 1. 方案介绍 在ASP.NET中,我们可以采用以下两种方案来实现从字符串中查找字符出现次数的需求: 通过遍历字符串字符,统计字符出现次数 通过使用正则表达式 接下来我们分别介绍这两种方案的具体实现。 2. 方案一:通过遍历字符串字符,统计字符出现次数 我们可以通过以下步骤来实现该…

    C# 2023年6月7日
    00
  • asp.net使用jquery模板引擎jtemplates呈现表格

    下面我将详细介绍“asp.net使用jquery模板引擎jtemplates呈现表格”的步骤及其示例。 jtemplates简介 jtemplates是一款基于jQuery的模板引擎,它可以帮助我们以非常简洁的方式生成HTML代码。它可以与jQuery非常好地集成,支持常用的语法结构。jtemplates提供了数据绑定、条件判断、循环等基本的模板引擎功能,可…

    C# 2023年5月31日
    00
  • c# 数据标注与数据校验

    以下是“c# 数据标注与数据校验”的完整攻略: 什么是数据标注与数据校验 在C#中,数据标注和数据校验是用来确保输入数据的有效性的两个重要概念。数据标注可以将各种标记应用于数据,使得我们可以在数据类中定义该数据的元数据。而数据校验可以帮助保证数据符合特定的规则和限制条件,从而消除了由错误数据引起的问题。 数据标注详解 什么是数据标注 数据标注是一种将标记应用…

    C# 2023年5月31日
    00
  • .NET中的MassTransit分布式应用框架详解

    以下是“.NET中的MassTransit分布式应用框架详解”的完整攻略: 什么是MassTransit MassTransit是一个开源的分布式应用框架,用于构建可扩展的、高可用的、松耦合的分布式应用程序。它基于消息传递模式,支持多种消息传递协议,例如RabbitMQ、Azure Service Bus、Amazon SQS等。 MassTrans的核心概…

    C# 2023年5月12日
    00
  • linq中的元素操作符

    LINQ中的元素操作符 LINQ(Language Integration Query)提供了许多强大的操作符,以便于我们对集合数据做各种各样的操作。在LINQ中,元素操作符(Element Operators)允许我们根据单个元素来访问或检查一个集合。 First First操作符返回序列中第一个元素,它也可以根据一个指定的条件筛选元素。如果序列为空,该操…

    C# 2023年6月1日
    00
  • 使用 HttpReports 监控 .NET Core 应用程序的方法

    在本攻略中,我们将详细讲解如何使用HttpReports监控.NET Core应用程序,并提供两个示例说明。 什么是HttpReports? HttpReports是一个基于.NET Core的开源应用程序性能监控工具,可以监控应用程序的性能指标、请求响应时间、错误率等。HttpReports提供了一个Web界面,可以方便地查看应用程序的性能数据。 使用Ht…

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