C#泛型使用介绍

C# 泛型介绍

在 C# 中,泛型(Generics)允许我们编写可以适用于多种数据类型的可复用代码,而不需要重复编写类或方法。泛型提供了类型参数化的能力,使得我们可以在编写代码时延迟确定具体的数据类型。

主要特点和优势:
  1. 代码复用和类型安全:

    • 泛型允许我们编写一次代码,适用于多种数据类型,从而提高了代码的复用性和可维护性。
    • 在编译时进行类型检查,避免了运行时类型转换错误,提供了更好的类型安全性。
  2. 性能优化:

    • 泛型类和方法在运行时会被编译为特定的数据类型,因此不会引入装箱和拆箱的开销,从而提高了性能。
  3. 可读性和灵活性:

    • 使用泛型使得代码更加清晰和简洁,因为可以在一个地方定义通用算法或数据结构。
    • 可以通过指定不同的类型参数来适应各种业务需求,提高了代码的灵活性。

使用案例介绍两个泛型的应用场景:

1. 泛型集合类 List<T>
复制代码
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个整数类型的 List
        List<int> numbers = new List<int>();
        numbers.Add(1);
        numbers.Add(2);
        numbers.Add(3);

        // 创建一个字符串类型的 List
        List<string> names = new List<string>();
        names.Add("Alice");
        names.Add("Bob");
        names.Add("Charlie");

        // 遍历并打印整数 List
        Console.WriteLine("整数列表:");
        foreach (int num in numbers)
        {
            Console.WriteLine(num);
        }

        // 遍历并打印字符串 List
        Console.WriteLine("\n字符串列表:");
        foreach (string name in names)
        {
            Console.WriteLine(name);
        }
    }
}
2. 泛型方法示例
复制代码
using System;

class Program
{
    static void Main(string[] args)
    {
        // 调用泛型方法 Swap
        int a = 1, b = 2;
        Console.WriteLine($"交换前:a = {a}, b = {b}");
        Swap(ref a, ref b);
        Console.WriteLine($"交换后:a = {a}, b = {b}");

        // 调用泛型方法 Max
        int maxInt = Max(5, 3);
        Console.WriteLine($"最大值是:{maxInt}");
    }

    // 泛型方法:交换两个变量的值
    static void Swap<T>(ref T a, ref T b)
    {
        T temp = a;
        a = b;
        b = temp;
    }

    // 泛型方法:返回两个值中较大的一个
    static T Max<T>(T x, T y) where T : IComparable<T>
    {
        return x.CompareTo(y) > 0 ? x : y;
    }
}
相关推荐
phltxy2 小时前
C 语言自定义类型:结构体、位段、枚举与联合体
c语言·开发语言
Sarvartha2 小时前
对象创建与引用
java·开发语言
hasty3 小时前
限制写了却没生效:OpenTelemetry Go 的 Unicode 截断边界
开发语言·后端·golang
编码者卢布4 小时前
【App Service 】WebJobs 多实例实验:谁在运行,什么时候运行?
开发语言·python
kaixin_learn_qt_ing4 小时前
Qt抽屉窗体实现demo
开发语言·qt
quantdash_cc4 小时前
Python 获取实时行情后如何进行批量筛选?从全市场快照到策略候选池
开发语言·python·数据分析·量化交易·股票数据·quantdash
论文复现现场4 小时前
论文复现看到“RTX 3090 or higher”:显存、CUDA、batch size 与 OOM 怎么判断?
开发语言·pytorch·batch·cuda·rtx3090
智鸟科技GemeOpen开发者智能设备4 小时前
GemeOpen 智能音箱 GSSM0B - 播放控制(Java示例)
java·开发语言·智能音箱
m0_380743875 小时前
PHP 8.3 接口返回数据为空怎么排查
开发语言·php
谢亮_vipxieliang5 小时前
Java 21 新特性实战:Record、Sealed、模式匹配
java·开发语言