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;
    }
}
相关推荐
lsx2024066 分钟前
jEasyUI 条件设置行背景颜色
开发语言
飞天小蜈蚣7 分钟前
python-django_ORM的十三个查询API接口
开发语言·python·django
LcVong8 分钟前
C# 基于MemoryMappedFile实现进程间通信(服务端+客户端完整范例)
linux·服务器·c#
飞雪20079 分钟前
局域网服务发现技术, DNS-SD和mDNS具体有什么区别, 什么不同?
开发语言·局域网·mdns·airplay·dns-sd·airprint
开开心心就好15 分钟前
打印机驱动搜索下载工具,自动识别手动搜
java·linux·开发语言·网络·stm32·物联网·电脑
时光追逐者20 分钟前
C#/.NET/.NET Core技术前沿周刊 | 第 66 期(2026年1.12-1.18)
c#·.net·.netcore
张np26 分钟前
java基础-ListIterator 接口
java·开发语言
AndrewHZ37 分钟前
【Python与生活】怎么用python画出好看的分形图?
开发语言·python·生活·可视化·递归·分形
陳103038 分钟前
C++:继承
开发语言·c++
GSDjisidi39 分钟前
正社員・個人事業主歓迎|GSD東京本社で働こう|業界トップクラスの福利厚生完備
开发语言·面试·职场和发展