C# 泛型函数

news/2024/7/14 19:12:27/文章来源:https://blog.csdn.net/weixin_45875105/article/details/139279837

在这里插入图片描述

1.非约束

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyGeneirc
{public class GeneircMethod{/// <summary>/// 泛型方法解决,一个方法,满足不同参数类型,做相同的事情/// </summary>/// <typeparam name="T">类型名称</typeparam>/// <param name="tParam">参数对象</param>public static void Show<T>(T tParam){Console.WriteLine("当前类:{0},参数类型名称:{1}, 值:{2}",typeof(GeneircMethod), tParam.GetType().Name, tParam.ToString());}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyGeneirc
{internal class Program{static void Main(string[] args){try{// 变量定义int iValue = 123;string strValue = "456";DateTime dtValue = DateTime.Now;object oValue = "Mr Sorry";// 泛型方法调用 Console.WriteLine("****************Geneirc***********************");// 泛型方法解决,一个方法,满足不同参数类型,做相同的事情GeneircMethod.Show<int>(iValue);GeneircMethod.Show<string>(strValue);GeneircMethod.Show<DateTime>(dtValue);GeneircMethod.Show<object>(oValue);// 泛型类GenericClass<int> genericInt = new GenericClass<int> { _t = 19 };// 约束Console.WriteLine("****************约束非约束***********************");People people = new People() { Id = 123, Name = "张三" };Chinese chinese = new Chinese() { Id = 234, Name = "李四" };Hubei hubei = new Hubei() { Id = 456, Name = "王五" };Japanese japanese = new Japanese() { Id = 678, Name = "田中" };// 无意义显示GeneircMethod.Show<People>(people);GeneircMethod.Show<Chinese>(chinese);GeneircMethod.Show<Hubei>(hubei);GeneircMethod.Show<Japanese>(japanese); }catch(Exception ex) {Console.WriteLine(ex.ToString());}Console.ReadLine();}}
}

在这里插入图片描述

2.泛型约束

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyGeneirc
{public class Constraint{/// <summary>/// 泛型约束/// 1.权利 可以使用基类的一切属性方法/// 2.义务 强制保证T 一定是People 或 其子类(不能是密封类,)/// </summary>public static void Show<T>(T tParam)where T : People, ISports // 基类约束{Console.WriteLine("当前类:{0},ID:{1}, Name:{2}",typeof(Constraint), tParam.Id, tParam.Name);tParam.Hi();}// 泛型约束相比父类 可以叠加,更加灵活public static void ShowBase(People tParam){Console.WriteLine("当前类:{0},ID:{1}, Name:{2}",typeof(Constraint), tParam.Id, tParam.Name);tParam.Hi();}public static T Get<T>(T t)where T : ISports // 接口约束{t.Pinpang();return t;}public static T GetClass<T>(T t)where T : class // 引用类型约束{T tNew = null; // T 必须是引用类型return t;}public static T GetStruct<T>(T t)where T : struct // 值类型约束{// 默认类型 根据T的不同 赋予默认值T tNew = default(T); // T 必须是值类型return t;}public static T GetNew<T>(T t)where T : new() // 无参数构造函数约束{// new 对象T tNew = new T(); // T 类必须有构造函数(无参数)return t;}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyGeneirc
{internal class Program{static void Main(string[] args){try{People people = new People() { Id = 123, Name = "张三" };Chinese chinese = new Chinese() { Id = 234, Name = "李四" };Hubei hubei = new Hubei() { Id = 456, Name = "王五" };Japanese japanese = new Japanese() { Id = 678, Name = "田中" };Console.WriteLine("****************约束基类***********************");//Constraint.Show<People>(people);Constraint.Show<Chinese>(chinese);Constraint.Show<Hubei>(hubei);//Constraint.Show<Japanese>(japanese); // 编译报错Console.WriteLine("****************约束接口***********************");Constraint.Get<Chinese>(chinese);}catch(Exception ex) {Console.WriteLine(ex.ToString());}Console.ReadLine();}}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1053739.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++算术运算和自增自减运算

一 引言 表示运算的符号称为运算符。 算术运算&#xff1b; 比较运算&#xff1b; 逻辑运算&#xff1b; 位运算&#xff1b; 1 算术运算 算术运算包括加、减、乘、除、乘方、指数、对数、三角函数、求余函数&#xff0c;这些都是算术运算。 C中用、-、*、/、%分别表示加、减…

Linux——多线程(一)

一、线程的概念 1.1线程概念 教材中的概念&#xff1a; (有问题?) 线程是进程内部的一个执行分支&#xff0c;线程是CPU调度的基本单位 之前我们讲的进程&#xff1a; 加载到内存中的程序&#x…

重学java 49 List接口

但逢良辰&#xff0c;顺颂时宜 —— 24.5.28 一、List接口 1.概述: 是collection接口的子接口 2.常见的实现类: ArrayList LinkedList Vector 二、List集合下的实现类 1.ArrayList集合的使用及源码分析 1.概述 ArrayList是List接口的实现类 2.特点 a.元素有序 —> 按照什么顺…

简单随机数据算法

文章目录 一&#xff0c;需求概述二&#xff0c;实现代码三、测试代码四、测试结果五、源码传送六、效果演示 一&#xff0c;需求概述 系统启动时&#xff0c;读取一组图片数据&#xff0c;通过接口返回给前台&#xff0c;要求&#xff1a; 图片随机相邻图片不重复 二&#…

Node.js和npm常用命令

一、Node.js简介 Node.js是一个免费、开源、跨平台的JavaScript运行时环境&#xff0c;允许开发人员创建服务器、web应用程序、命令行工具和脚本。 点击查看node.js中文官网 点击查看node.js英文官网 二、npm简介 npm(Node Package Manager)是Node.js的软件包管理器&#xff0…

三层交换机基本配置,动态路由链接

<Huawei>system-view //进入系统视图[Huawei]undo info-center enable //关日志[Huawei]vlan batch 2 3 //创建vlan2与3[Huawei]display vlan //检查[Huawei]interface GigabitEthernet 0/0/2 //进2口[Huawei-GigabitEthernet0/0/2]port link-type access //配置…

安全态势管理的六大挑战:态势感知

德迅云安全鉴于如今的安全威胁不断变幻&#xff0c;企业对实施态势管理策略至关重要&#xff0c;可以让安全团队根据需要进行安全策略的动态调整。如果企业在研究构建态势感知管理&#xff0c;需要特别关注以下六个方面的挑战。 如果企业正在使用一个或多个平台&#xff0c;那么…

如何用分立器件设计一个过流保护电路

过流保护电路是指当后级负载电流过大或者发生短路时&#xff0c;自动切断电源与后级负载&#xff0c;从而防止大电流损害电源电路&#xff0c;过流保护又叫OCP。 常见的过流保护电路有保险丝过流保护&#xff0c;集成的过流保护芯片&#xff0c;还有这种分立器件搭建的过流保护…

【vue-cli搭建vue项目的过程2.x】

vue-cli搭建vue项目 vue-cli搭建vue项目安装node安装vue-cli脚手架并创建项目安装 Ant Design Vue或element-ui(笔者使用Ant-design-vue组件&#xff0c;并全局引入)开发安装三方库包1、Package.json文件---引入如下package.json文件执行npm i或npm install命令即可下载如下依赖…

java多线程创建方式

1. 继承Thread类 这种方式是通过创建一个新的类继承自Thread类&#xff0c;并覆盖run()方法来创建线程。然后通过创建这个类的对象并调用其start()方法来启动线程。 public class MyThread extends Thread { public void run() { // 在这里定义线程的执行逻辑 …

基于小波分析和机器学习(SVM,KNN,NB,MLP)的癫痫脑电图检测(MATLAB环境)

癫痫是一种由大脑神经元突发性异常放电导致的大脑功能性障碍疾病。据世界卫生组织统计&#xff0c;全球约有7000万人患有癫痫。癫痫患者在发病时呈现肌肉抽搐、呼吸困难、意识丧失等症状。由于癫痫发作的偶然性&#xff0c;患者极有可能在高空、驾驶、游泳等危险情况下发病并丧…

SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测预测效果基本介绍程序设…

Python条件分支与循环

大家好&#xff0c;当涉及到编写高效和灵活的程序时&#xff0c;条件分支和循环是 Python 中至关重要的概念。它们允许我们根据不同的条件执行不同的代码块&#xff0c;或者重复执行一组语句。条件分支和循环是测试开发工程师在日常工作中经常使用的工具&#xff0c;无论是编写…

kind: Telemetry

访问日志 访问日志提供了一种从单个工作负载实例的角度监控和理解行为的方法。 Istio 能够以一组可配置的格式为服务流量生成访问日志&#xff0c; 使操作员可以完全控制日志记录的方式、内容、时间和地点。 有关更多信息&#xff0c;请参阅获取 Envoy 的访问日志。 https:/…

二叉树(概念详解)

目录 树树的概念完全二叉树和满二叉树完全二叉树存储完全二叉树用数组存储堆 树 树是一种非线性的数据结构 树是根朝上的&#xff0c;叶子是朝下的 树是递归定义的【根N棵子树】 递归定义&#xff1a;大事化小&#xff0c;可以理解为套娃 树的子树之间是独立的&#xff0c;所…

conda 环境找不到 libnsl.so.1

安装prokka后运行报错 perl: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory 通过conda list 可以看到 有libsnl 2.00版本&#xff0c;通过修改软链接方式进行欺骗

面试题:字符串“1024“不强转怎么变成数字1024(ASCII应用)

面试题&#xff1a;就是面试官很秀的场合。怎么把字符串"1024"转成1024 1.ASCII码表是什么&#xff1f; ASCII(American Standard Code for Information Interchange)码表使用用于将字符转换成对应数字的编码规范。它由美国国家标准协会(ANSI)于1963年制定&#xf…

Llama模型家族训练奖励模型Reward Model技术及代码实战(二)从用户反馈构建比较数据集

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

AAAI2024 基于扩散模型 多类别 工业异常检测 DiAD

前言 本文分享一个基于扩散模型的多类别异常检测框架&#xff0c;用于检测工业场景的缺陷检测或异常检测。 设计SG语义引导网络&#xff0c;在重建过程中有效保持输入图像的语义信息&#xff0c;解决了LDM在多类别异常检测中的语义信息丢失问题。高效重建&#xff0c;通过在潜…

rust语言初识

程序设计实践课上水一篇ing 来源&#xff1a;rust基础入门-1.初识rust-酷程网 (kucoding.com) rust作为一名新兴语言&#xff0c;与go又有些许不同&#xff0c;因为它的目标是对标系统级开发&#xff0c;也就是C、C这两位在编程界的位置。比如我们最常用的windows系统&#x…