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#中,函数的传参有两种方式:传值和传址。这两种传参方式的作用是不一样的,下面我们将进行详细讲解。 传值(值类型) 值类型是指像int、float、char、bool等结构体(struct)类型,这些类型是分配在栈内存上的数据类型。当我们把一个值类型的变量传递给一个函数时,实际上是传递了这个变量的值的副本,即该变量的一个复制品。…

    C# 2023年6月7日
    00
  • c#操作sql server2008 的界面实例代码

    下面我将为你详细讲解“C#操作SQL Server 2008的界面实例代码”的完整攻略。 界面设计 首先需要设计一个界面,使用Visual Studio编写WinForm应用程序,并添加相应的控件。 界面示例代码: <form> <button name="btnInsert" text="插入" /…

    C# 2023年5月31日
    00
  • 生成代码从T到T1、T2、Tn自动生成多个类型的泛型实例代码

    生成代码从 T 到 T1、T2、Tn 可以采用泛型实现,这要求在代码的编写中加入范型的参数和返回类型,并在程序运行时通过传入的不同类型参数自动生成多个类型的泛型实例代码。 具体实现步骤如下: 在代码中声明一个泛型方法,该方法中使用泛型参数 T 作为数据类型的占位符,以代表传入参数的类型。示例代码如下: public static <T> void…

    C# 2023年6月6日
    00
  • asp.net 文件下载的通用方法

    ASP.NET 是一个强大的 Web 应用程序框架,可用于创建各种类型的 Web 应用程序。如果你需要在应用程序中实现文件下载功能,下面是一套通用的方法,能够帮助你轻松达成目标。 使用 Response.TransmitFile 方法实现文件下载 第一种实现文件下载的方法是使用 Response.TransmitFile 方法。这种方法的优点是非常简单易用,…

    C# 2023年6月3日
    00
  • C#实现读取DataSet数据并显示在ListView控件中的方法

    C#实现读取DataSet数据并显示在ListView控件中的方法 1. 创建DataSet对象并添加DataTable 首先,需要创建一个DataSet对象并添加一个或多个DataTable对象,来存储需要读取的数据。示例代码如下: DataSet dataSet = new DataSet(); DataTable table = new DataTab…

    C# 2023年6月7日
    00
  • ASP.NET获取MS SQL Server安装实例实现思路及代码

    ASP.NET获取MS SQL Server安装实例需要以下几个基本步骤: 步骤1:引用命名空间 首先,在你的ASP.NET项目中的代码文件中引用以下命名空间: using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Common; 步骤2:创建连接 在引用…

    C# 2023年5月31日
    00
  • c# 如何将RadioButton与DataTable数据进行绑定

    首先,需要注意的是,RadioButton控件是WinForm中的控件,而DataTable是数据存储的一种方式,它们并没有直接的绑定方式,因此我们需要自己编写代码来完成二者的绑定。 以下是一个使用C#语言,将RadioButton与DataTable数据进行绑定的完整攻略: 1. 获得DataTable数据 首先,我们需要从数据源(比如数据库、文本文件等)…

    C# 2023年6月6日
    00
  • ASP.NET MVC HtmlHelper如何扩展

    ASP.NET MVC HtmlHelper是一个很强大的工具,它可以帮助我们在视图中构建HTML代码。但是,这些HtmlHelper可能无法满足我们的需求,因此我们需要扩展它们。下面是ASP.NET MVC HtmlHelper如何扩展的完整攻略: HTML Helper的扩展方法命名约定 要扩展HTML Helper,首先需要创建一个静态类并在其中创建一…

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