当前位置: 首页 > news >正文

c#泛型(generic)

概述:

C#中的泛型(Generics)是一种允许在编写类、方法和委托时使用参数化类型的机制。泛型允许我们编写更通用、可重用的代码,可以避免类型转换和重复编写类似的代码。

泛型的基本语法如下所示:

class ClassName<T>
{// 泛型类的定义
}void MethodName<T>(T parameter)
{// 泛型方法的定义
}

在泛型类或泛型方法中,T是类型参数,可以用于定义类的字段、方法的参数和返回类型。

以下是使用泛型的几个常见示例:

泛型类:

class GenericClass<T>
{private T value;public GenericClass(T value){this.value = value;}public T GetValue(){return value;}
}GenericClass<int> intObject = new GenericClass<int>(5);
int intValue = intObject.GetValue();GenericClass<string> stringObject = new GenericClass<string>("Hello");
string stringValue = stringObject.GetValue();

泛型方法:

T Max<T>(T a, T b)
{return a.CompareTo(b) > 0 ? a : b;
}int maxInt = Max<int>(5, 3);
string maxString = Max<string>("apple", "banana");

泛型传递:

//子类也不确定具体类型,把类型传递给后面需要用到泛型特化的地方

        public class person<T>{public T Name { get; set; }}//泛型方法中也可以定义多个泛型public class teacher<T, U> : person<T>{public U date { get; set; }public override string? ToString(){string str = "";str += $"name:{Name}\n";str += $"date:{date}";return str.ToString();}}private static void Main(string[] args){teacher<string, int> t1 = new teacher<string, int>();t1.Name = "xiaoming";t1.date = 2023;Console.WriteLine(t1.ToString());}

泛型约束(Constraints)允许我们对泛型类型参数进行限制,可以指定类型参数必须满足的条件。例如,可以使用where关键字限制类型参数必须是某个基类、接口或具有无参数构造函数等。

泛型约束示例:

class GenericClass<T> where T : IComparable
{// T必须实现IComparable接口
}T Max<T>(T a, T b) where T : IComparable
{// T必须实现IComparable接口
}class MyClass<T> where T : new()
{// T必须具有无参数构造函数
}

除了类和方法,C#还支持泛型接口和泛型委托。泛型接口和泛型委托的使用方式与泛型类和泛型方法类似。

泛型的优点包括代码重用、类型安全、性能优化和更好的可读性。通过使用泛型,我们可以编写更加灵活、通用的代码,提高了代码的可维护性和可扩展性。

相关文章:

c#泛型(generic)

概述&#xff1a; C#中的泛型&#xff08;Generics&#xff09;是一种允许在编写类、方法和委托时使用参数化类型的机制。泛型允许我们编写更通用、可重用的代码&#xff0c;可以避免类型转换和重复编写类似的代码。 泛型的基本语法如下所示&#xff1a; class ClassName<…...

【力扣每日一题】2023.8.30 到家的最少跳跃次数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一只跳蚤&#xff0c;我们可以操控它前跳 a 格或是后跳 b 格&#xff0c;不能跳到小于0的位置&#xff0c;有一些被禁止的点不…...

精读《算法题 - 地下城游戏》

今天我们看一道 leetcode hard 难度题目&#xff1a;地下城游戏。 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士…...

随记-Kibana Dev Tools,ES 增删改查 索引,Document

索引 创建索引 创建索引 PUT index_test创建索引 并 修改分片信息 # 创建索引 并 修改分片信息 PUT index_test2 { # 必须换行, PUT XXX 必须独占一行&#xff0c;类似的 其他请求也需要独占一行 "settings": {"number_of_shards": 1, # 主分片"…...

什么是架构,架构的本质是什么

不论是开发人员还是架构师&#xff0c;我们都一直在跟软件系统打交道&#xff0c;架构是在工作中出现最频繁的术语之一。那么&#xff0c;到底什么是架构&#xff1f;你可能有自己的答案&#xff0c;也有可能没有答案。对“架构”的理解需要我们不断在实践中思考、归纳、演绎&a…...

Python爬虫(十七)_糗事百科案例

糗事百科实例 爬取糗事百科段子&#xff0c;假设页面的URL是: http://www.qiushibaike.com/8hr/page/1 要求&#xff1a; 使用requests获取页面信息&#xff0c;用XPath/re做数据提取获取每个帖子里的用户头像连接、用户姓名、段子内容、点赞次数和评论次数保存到json文件内…...

Ae 效果:CC Threads

生成/CC Threads Generate/CC Threads CC Threads&#xff08;CC 编织条&#xff09;效果基于当前图层像素生成编织条图案和纹理。可以用在各种设计中&#xff0c;如背景设计、图形设计、文字设计等。 ◆ ◆ ◆ 效果属性说明 Width 宽度 设置编织的宽度。 默认值为 50。值越大…...

Kotlin 协程 - 多路复用 select()

一、概念 又叫选择表达式&#xff0c;是一个挂起函数&#xff0c;可以同时等待多个挂起结果&#xff0c;只取用最快恢复的那个值&#xff08;即多种方式获取数据&#xff0c;哪个更快返回结果就用哪个&#xff09;。 同时到达 select() 会优先选择先写子表达式&#xff0c;想随…...

学习笔记-ThreadLocal

ThreadLocal 什么是ThreadLocal&#xff1f; ThreadLocal 是线程本地变量类&#xff0c;在多线程并行执行过程中&#xff0c;将变量存储在ThreadLocal中&#xff0c;每个线程中都有独立的变量&#xff0c;因此不会出现线程安全问题。 应用举例 解决线程安全问题&#xff1a;例…...

python利用pandas统计分析—groupby()函数的使用

文章目录 一、groupby使用场景二、groupby基本原理三、groupby分组运算基础聚合操作&#xff1a;只能选择一种聚合操作agg 聚合操作&#xff1a;可以针对同列选择不同聚合方法transformapply 四、groupby分组后去重统计nunique()五、groupby分组后重命名列名rename()直接重新命…...

OPENCV实现ORB特征检测

# -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/8/31 """ import cv2 import numpy as np# 读图像 img = cv2.imread(F:\\learnOpenCV\\openCVLearning\\pictures\\chess.jpg)...

W5100S-EVB-PICO主动PING主机IP检测连通性(十)

前言 上一章节我们用我们开发板在UDP组播模式下进行数据回环测试&#xff0c;本章我们用开发板去主动ping主机IP地址来检测与该主机之间网络的连通性。 什么是PING&#xff1f; PING是一种命令&#xff0c; 是用来探测主机到主机之间是否可通信&#xff0c;如果不能ping到某台…...

使用 Nginx 搭建文件下载服务器

文章目录 一、基础环境二、适用场景三、方法和步骤四、其他说明 版权声明&#xff1a;本文为CSDN博主「杨群」的原创文章&#xff0c;遵循 CC 4.0 BY-SA版权协议&#xff0c;于2023年8月27日首发于CSDN&#xff0c;转载请附上原文出处链接及本声明。 原文链接&#xff1a;http…...

链式栈StackT

C关键词&#xff1a;内部类/模板类/头插 C自学精简教程 目录(必读) C数据结构与算法实现&#xff08;目录&#xff09; 栈的内存结构 空栈&#xff1a; 有一个元素的栈&#xff1a; 多个元素的栈&#xff1a; 成员函数说明 0 clear 清空栈 clear 函数负责将栈的对内存释放…...

Fiddler中 AutoResponder 使用

Fiddler的 AutoResponder &#xff0c;即URL重定向功能非常强大。不管我们做URL重定向&#xff0c;还是做mock测试等&#xff0c;都可以通过该功能进行实践。 下面&#xff0c;小酋就来具体讲下该功能的用法。 Enable rules 启用规则Unmatched requests passthrough 没有匹配…...

77GHz线性调频连续波雷达

文章目录 前言 一、背景 二、优缺点 三、工作原理 四、电路模块设计 4.1.LFMCW信号源 4.2.发射电路 4.3.接收电路 4.4.信号处理器 五、应用 5.1.汽车测距 5.2.军事方面 5.3.气象方面 总结 前言 这篇文章是博主本科期间整理的关于77GHz线性调频连续波雷达的相关资料&#xff0c;…...

YOLOV8改进:更换为MPDIOU,实现有效涨点

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 2.涨点效果:更换为MPDIOU,实现有效涨点! 目录…...

BookStack开源免费知识库docker-compose部署

BookStack&#xff08;书栈&#xff09;是一个功能强大且易于使用的开源知识管理平台&#xff0c;适用于个人、团队或企业的文档协作和知识共享。 一、BookStack特点 简单易用&#xff1a;BookStack提供了一个直观的用户界面&#xff0c;使用户能够轻松创建、编辑和组织文档多…...

Linux:编译遇到 Please port gnulib freadahead.c to your platform ,怎么破

问题背景 编译m4时遇到以下错误&#xff0c;该怎么解决呢&#xff1f; 解决方法 进入m4的build目录&#xff1a;build/host-m4-1.4.17 输入命令&#xff1a; sed -i s/IO_ftrylockfile/IO_EOF_SEEN/ lib/*.c echo "#define _IO_IN_BACKUP 0x100" >> lib/std…...

three.js(三):three.js的渲染结构

three.js 的渲染结构 概述 three.js 封装了场景、灯光、阴影、材质、纹理和三维算法&#xff0c;不必在直接用WebGL 开发项目&#xff0c;但有的时候会间接用到WebGL&#xff0c;比如自定义着色器。three.js 在渲染三维场景时&#xff0c;需要创建很多对象&#xff0c;并将它…...

千问3.5-2B在办公提效场景:会议白板照片文字提取+要点总结实战

千问3.5-2B在办公提效场景&#xff1a;会议白板照片文字提取要点总结实战 1. 办公场景的痛点与解决方案 1.1 会议记录的传统困境 每次开完会&#xff0c;最让人头疼的就是整理会议记录了。特别是那些在白板上写满讨论要点的会议&#xff0c;你需要&#xff1a; 对着白板照片…...

Phi-3-mini-4k-instruct-gguf一文详解:GGUF模型加载机制与内存映射优化原理

Phi-3-mini-4k-instruct-gguf一文详解&#xff1a;GGUF模型加载机制与内存映射优化原理 1. GGUF模型格式概述 GGUF&#xff08;GPT-Generated Unified Format&#xff09;是llama.cpp团队设计的新一代模型文件格式&#xff0c;专门为大型语言模型优化。相比之前的GGML格式&am…...

Asian Beauty Z-Image Turbo基础教程:如何修改默认提示词实现‘旗袍少女’‘水墨仕女’风格

Asian Beauty Z-Image Turbo基础教程&#xff1a;如何修改默认提示词实现‘旗袍少女’‘水墨仕女’风格 想用AI画出充满东方韵味的“旗袍少女”或“水墨仕女”&#xff0c;但试了很多模型&#xff0c;出来的效果总是不对味&#xff1f;要么人物五官太西化&#xff0c;要么画面…...

webMAN-MOD终极指南:如何在PS3上安装这款强大的全能插件

webMAN-MOD终极指南&#xff1a;如何在PS3上安装这款强大的全能插件 【免费下载链接】webMAN-MOD Extended services for PS3 console (web server, ftp server, netiso, ntfs, ps3mapi, etc.) 项目地址: https://gitcode.com/gh_mirrors/we/webMAN-MOD 你是否还在为PS3…...

Nacos服务实例权重设置详解:如何根据服务器性能动态调整流量分配

Nacos服务实例权重设置详解&#xff1a;如何根据服务器性能动态调整流量分配 在分布式系统架构中&#xff0c;服务实例的性能差异是不可避免的现实问题。新采购的服务器与运行多年的老旧设备并存&#xff0c;不同配置的云主机混合部署&#xff0c;这些场景都要求我们能够智能地…...

苏州沃虎电子(VOOHU)10/100M集成式RJ45连接器SYT111B002BA2A1D产品介绍

苏州沃虎电子科技有限公司&#xff08;品牌&#xff1a;VOOHU&#xff09;供应的 SYT111B002BA2A1D 是一款高可靠性集成式RJ45连接器&#xff0c;专为10/100M以太网应用设计。该产品采用90侧插DIP封装&#xff0c;内置网络变压器&#xff0c;具备工业级宽温工作能力和优异的信号…...

协方差矩阵可视化指南:如何用Seaborn热力图解读变量关系(附完整代码)

协方差矩阵可视化指南&#xff1a;如何用Seaborn热力图解读变量关系&#xff08;附完整代码&#xff09; 在数据分析的实际工作中&#xff0c;我们常常需要向非技术背景的决策者解释复杂的统计结果。这时候&#xff0c;一张直观的热力图往往比几十页的统计报告更有说服力。协方…...

华为 eNSP 安装全攻略:Windows 11 25H2 完美适配

本教程适用范围 ✅ Windows 7&#xff08;所有版本&#xff09;✅ Windows 10&#xff08;所有版本&#xff09;✅ Windows 11 23H2 及以下✅ Windows 11 24H2&#xff08;OS 内部版本 ≥ 26100.3624&#xff09;✅ Windows 11 25H2❌ Windows 11 24H2&#xff08;OS 内部版本…...

突破百度网盘限速:面向资源获取者的高效直链解析方案

突破百度网盘限速&#xff1a;面向资源获取者的高效直链解析方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾经历过这样的场景&#xff1f;深夜下载一份重要的项目…...

【立煌】友达10.1寸G101STN01.C工业液晶屏LCD

G101STN01.C是AUO一款10.1英寸、1024600的工控液晶屏&#xff0c;走LVDS单通道40pin&#xff08;1ch&#xff0c;6/8-bit&#xff09;&#xff0c;逻辑电压3.3V&#xff0c;公开流通参数里常见亮度500cd/㎡、对比度500:1、视角70/70/60/60、背光WLED且带LEDDriver&#xff0c;背…...