C#基础——泛型

泛型

C# 中的泛型是一种强大的编程特性,它允许你编写类型安全且灵活的代码。泛型允许你定义类、结构体、接口、方法和委托,而不必在编译时指定具体的数据类型。相反,你可以使用类型参数来定义泛型类型或方法,然后在使用时指定具体的类型。
接下来通过几个简单的泛型例子初步了解泛型。

泛型方法

泛型用 T 指代那些未知类型,并且需要用<T>来定义泛型,和指定泛型类型。
T可以看作为一种数据类型,并且这个数据类型是任意的。

**<T>**在方法名后面,说明这个泛型方法。

dynamic是一种特殊类型,会在运行中解析,这使得你可以调用方法和访问属性,而不需要知道对象的确切类型。

cs 复制代码
        static void Main(string[] args)
        {
            T Add<T>(T num1, T num2)
            {
            dynamic numTmp1 = num1;
            dynamic numTmp2 = num2;
            return numTmp1 + numTmp2;
            }

            int result = Add(5, 8);
            //string result = Add("5", "8");
            //string result = Add("Rain", "Bow");

            Console.WriteLine("result = " + result);
            Console.ReadKey();
        }

泛型类

通过泛型类,可以快速完成不同类的创建属性和定义方法。下列就是关于int类型和string类型的数组创建以及根据关键字查找数据。

cs 复制代码
    class MyArray<T>
    {
        T[] arrData = new T[10];
        public void Set(T value, int index)
        {
            arrData[index] = value;
        }

        public T GetDataByIndex(int index)
        {
            return arrData[index];
        }
    }
cs 复制代码
        static void Main(string[] args)
        {
            MyArray<int> myArr = new MyArray<int>();
            myArr.Set(5, 0);
            myArr.Set(6, 1);
            myArr.Set(7, 2);
            myArr.Set(8, 3);
            myArr.Set(9, 4);

            int value = myArr.GetDataByIndex(3);
            Console.WriteLine(value);

            MyArray<string> myArrStr = new MyArray<string>();
            myArrStr.Set("张三", 0);
            myArrStr.Set("李四", 1);
            myArrStr.Set("王五", 2);
            myArrStr.Set("赵六", 3);
            myArrStr.Set("钱七", 4);

            string valueStr = myArrStr.GetDataByIndex(3);
            Console.WriteLine(valueStr);
        }

泛型约束

cs 复制代码
public class 泛型名<T> where T : 类名 // T 必须是引用类型
{
    // 类定义
}

public class 泛型名<T> where T : 结构体名// T 必须是值类型
{
    // 类定义
}

方法

cs 复制代码
public T 泛型名<T>() where T : 类名    // 使用where约束T的类型
{
    // 方法语句
    return null;    //return 为空时直接输出
    return 数据名 as T;    //return 不为空时,需要强转为T类型
}

关于泛型就介绍到此,泛型的运用场景非常多,这里就不举例了。

相关推荐
中科三方7 分钟前
DNS拨测到底在拨测什么?
开发语言·github·php·dns·云拨测
软件黑马王子10 分钟前
20.Resources资源加载:基本实现
开发语言·前端框架·c#
李少兄34 分钟前
Java 中只有值传递吗?
java·开发语言·python
张人玉1 小时前
基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统
windows·sqlite·c#·.net
可乐鸡翅yeah_1 小时前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放
1314lay_10071 小时前
C#调用Sql Server存储过程,并且使用传入表结构
数据库·经验分享·笔记·sqlserver·c#
szarron1 小时前
RF Demo Kit|NanoVNA 射频演示测试板完整上手教程,滤波器、衰减器、SOLT 校准学习板
开发语言·人工智能·学习·php·射频工程·频谱仪
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day39|SpringAI 会话存储、Function‑Call 工具调用、MCP 思维导图复盘
java·开发语言·spring boot·学习·阿里云
慧都小妮子2 小时前
.NET 报表控件选型对比:Stimulsoft 与 FastReport 怎么选
c#·.net·报表开发·数据可视化·报表控件·报表引擎选型
万物智能信息科技2 小时前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos