【C#基础教程】第二十一章、泛型

EEGLAB+ERPLAB实战:从.cnt文件到情绪ERP差异波,一份避坑指南 本文详细介绍了使用EEGLAB和ERPLAB处理Neuroscan的.cnt格式脑电数据的全流程,从数据导入、预处理到情绪ERP差异波生成。重点解决了采样率验证、事件标记检查、重参考选择、滤波策略与ICA组合等实操难题,并提供了情绪图片ERP研究中P1、EPN和LPP成分的分析技巧,帮助研究者避免常见错误,提升数据处理效率。 阅读详情

目录

泛型

1.泛型(generic)

2.泛型详解

2.1 类型参数T

2.2 泛型中的静态字段和静态函数问题

2.3类型参数的约束(where关键字)

2.3.1 引用类型约束

2.3.2 值类型约束

2.3.3 构造函数类型约束

2.3.4 转换类型约束


泛型

1.泛型(generic)

  泛型的意义:委托可以让方法参数化,泛型可以让类型参数化。泛型代表的是通用类型,它可以代替任意的数据类型,使类型参数化,从而达到只实现一个方法就可以操作多种数据类型的目的。

  使用泛型的好处:泛型可以避免不同类型转换时带来的数据损失,提供了更好的性能和类型安全特性。

  泛型的定义:泛型将方法实现行为与方法操作的数据类型分离,实现代码重用。

  用.NET类库声明并初始化泛型的语法:        List<T>  变量名  =  new List<T>();

  泛型类声明并初始化的语法:                class  类名1<T>  where T:类名2{...}

  泛型方法声明并初始化的语法:          static  T  方法名(T 形参, ...){...}

  泛型语法解读:

  • List<T> 是.NET类库中实现的泛型类型
  • T是泛型参数(可以理解为形参)
  • 类名<T>是泛型类
  • where是类型参数的约束,它用来使类型参数可以适用于类型2中的方法。

  泛型的示例:

class Program
{
    static void Main(string[] args)
    {
        //用int作为实际参数来初始化泛型类型
        List<int> intList=new List<int>();
        //从int列表添加元素3
        intList.Add(3);

        //用string作为实际参数来初始化泛型类型
        List<string> stringList=new List<string>();
        //从string列表添加元素3
        stringList.Add("3");
    }
}

  泛型的使用:用泛型来写比较两数大小的方法

//泛型类
public class Compare<T> where T:ICompare
{
    //泛型方法
    public static T compareGeneric(T a1,T a2)
    {
        if(a1.CompareTo(a2)>0)
        {
            return a1;
        }
        else
            return a2;
    }
}
public class Program
{
    static void Main(string[] args)
    {
        //调用泛型方法
        Console.WriteLine(Compare<int>.compareGeneric(1,3));
        Console.WriteLine(Compare<string>.compareGeneric("a","as"));
    }
}

2.泛型详解

2.1 类型参数T

  类型参数T的定义:类型参数T是泛型参数(可以理解为形参)。它是一个可被数据类型替代的参数,当我们调用泛型时,我们需要初始化T,替代T的数据类型(如int、string等)可以被看做实参。

  使用类型参数T时的两种情况:

  • 泛型分为两类:未绑定的泛型、已构造的泛型
    • 未绑定的泛型:没有T被替代
    • 已构造的泛型:有T被替代
  • 已构造的泛型分为两种:开放类型、封闭类型
    • 开放类型:有T被替代,但未全被替代。
    • 封闭类型:T全被替代。

  注意:当你用 数据类型1 替代 类型参数T 后,泛型数组中的列表不能容纳 数据类型1 以外的数据类型变量。

2.2 泛型中的静态字段和静态函数问题

问:静态数据类型是属于类型的。对于静态数据而言,一个类只有一份。对于泛型类型,静态类也只有一份吗?

答:不,每个封闭的泛型类型都有仅属于自己的静态数据。

2.3类型参数的约束(where关键字)

  类型参数约束的意义:当我们需要在泛型类中从别的类调用方法的时候,我们的类型参数T未为任意类型,而有的类型并没有提供想要调用的方法,此时编译器会报错。而where的存在可以把T类型的范围控制在可以调用方法的类型中。

  where关键字的作用:限制某个类型实参的类型。

  C#的四种约束:引用类型约束、值类型约束、构造函数类型约束、转换类型约束。

2.3.1 引用类型约束

  引用类型约束的语法:        T:class

   引用类型约束的作用:它确保传递的类型实参必须是引用类型。

2.3.2 值类型约束

  值类型约束的语法:        T:struct

    值类型约束的作用:它确保传递的类型实参必须是值类型。(包括枚举,不包括可空类型     )

2.3.3 构造函数类型约束

  构造函数类型约束的语法:        T:new()

    构造函数类型约束的作用:它确保传递的类型实参必须是构造函数类型。

    使用构造函数类型约束的要求:

  • 若有多个约束,则此约束必须放在最后。

2.3.4 转换类型约束

  转换类型约束的语法:        T:基类名、T:接口名、T:U

  转换类型约束语法解读: 

  • T:基类名:确保传递的类型实参必须是基类或其基类的派生类
  • T:接口名:确保指定的类型实参必须是接口或实现了该接口的类
  • T:U        :确保指定的类型实参必须是U提供的类型实参或派生于U提供的类型实参

示例:

核磁分析必备,ACD/Labs软件使用全解析 核磁共振(NMR)是化学分析中的重要工具,而ACD/Labs提供了一套强大的软件解决方案。从实验设计到数据解读,ACD/Labs 的 NMR 预测可以显著加快您的工作流程。使用 ACD/NMR 预测可以:根据化学结构预测 1H、13C、15N、19F 和 31P 核的全套 1D 和 2D NMR 光谱;在几秒钟内计算化学位移和耦合常数;利用内部数据训练算法,提高新化学空间的准确性。 阅读详情

相关推荐

解决Windows 10更新失败错误代码0x80070643

在Windows 10操作系统的更新过程中,用户时常会遇到各类错误代码,这些代码通常成为顺利完成更新的绊脚石。其中,错误代码0x80070643是一个较为常见的更新失败提示,它可能导致系统更新停滞不前。面对这一挑战,本文将详细介绍如何有效解决这一错误,帮助用户顺利完成Windows 10的更新。

nntxthml的博客 1827

图解C#高级教程(三):泛型

在使用泛型类创建变量时,可以使用关键字var,让编译器根据右边的类型自动推断变量的类型。set;set;// 让编译器推断类型103.14Hellotrue需要注意的是,为具体类分配的内存是存储在堆上的。

聚焦C++/Python编程语言、大模型应用开发 4706

跨模型的 API 调用与集成:使用 Spring AI 构建可移植的 API 代码,支持多个 AI 模型(如 OpenAI、Anthropic 等)的调用

Spring AI 是 Spring 生态系统中的一部分,旨在提供一种简单、可扩展的方式来集成人工智能模型。Spring AI 使得开发者可以使用现有的 Spring 体系结构方便地访问多种 AI 模型和服务,例如 OpenAI、Anthropic、HuggingFace 等。

秋元的博客 2404

C#学习教程09——泛型

C#学习教程,适合新手小白,附带学习源码。

Kint的博客 776

poincare截点

poincare映射定义比较抽象,简单理解就是每个原始周期取一个点,表现在程序中的思路如下: 以激励的周期T0为poincare的原始周期,设置1个周期取m个点,取N个周期设置T0/m为ode45的步长,每个周期的 i*m个点处取一个点(i=0.0-1.0),把这些点画出来就行了。有几个点就是几倍周期。 (注意:ode45算法是变步长的算法,所以一定要之前自己设置步长,我在这个地方吃了很大一个亏...

小树 3008

stable diffusioncontrolNet 预处理器/模型的下载及安装使用教程

首先说明,controlNet 的模型 不同于stable diffusion 模型,这一点一定要区分清楚。下面提供多个ControlNet 预处理器+ 专用模型的百度网盘下载链接,都是由群友整理贡献,但各自包含的版本不同,大家可自行选择。推荐下载紫色链接内的模型,fp16版文件更小,稍微新一些的controlnet插件还添加了对control-lora的支持(注意,要求controlnet插件的版本比12月16号新(1.1.423以上)才能正常识别),推荐下载;

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3385

泛型数据格式判断

方法可以用T接收泛型类型,我们可以通过泛型统一方法,根据数据类型来处理一样的流程。

qq_43826626的博客 452

【DRAM存储器六十四】DDR5介绍--preamble、postamble、interamble、刷新、power down、MPSM

简述DDR5 reamble、postamble、interamble、刷新、power down、MPSM的功能定义

highman110的博客 337

C#——泛型相关

【代码】C#——泛型相关。

qq_37233070的博客 156

[知识图谱构建] 一.Neo4j图数据库安装初识及药材供应图谱实例

2012年5月,谷歌公司的知识图谱(Knowledge Graph)产品被正式提出,其旨在将人、地点、物等信息作为实体,将实体间的联系作为关系,并将实体和关系以图的形式进行存储。作为语义网的最新产物,知识图谱这种新型的搜索引擎改变了传统的文本搜索结果,而随后国内公司也开发出了相应产品,例如百度公司的“知心”和搜狗公司的“知立方”等。知识图谱本质上属于一种语义网。知识图谱中的每一条数据或事实一般会采用 &amp;lt;实体,属性,属性值&amp;gt; &amp;lt;实体, 关系,

杨秀璋的专栏 1万+

嵌入式硬件中AI硬件设计方法与技巧

嘉立创EDA推出AI助手Kimi插件,为PCB设计提供智能支持。该插件具备四大核心功能:AI问答助手可解答各类电路设计问题;元件查询功能直接展示参数和应用场景;智能分析网表可检测潜在问题;电路图识别能解析图纸结构并提供改进建议。用户需通过扩展插件安装,并配置Kimi API密钥后使用。该工具旨在提升工程师的设计效率,减少查阅资料时间,特别适合项目交接和设计自查场景。

嵌入式技术开发 1868

不能将类型“T”用作泛型类型或方法“XXX”中的类型形参“T”。没有从“T”到“XXX”的装箱转换或类型形参转换

C#编程时遇到如下错误: 错误 3 不能将类型“T”用作泛型类型或方法“XXX”中的类型形参“T”。没有从“T”到“XXX”的装箱转换或类型形参转换 代码如下: public List<T> getData<T>(string queryID, string version, int startPage, int perPageRowCount) where T:BaseEntity { QueryMessageParam param = new QueryMessage

一花一世界 4510

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托

泛型集合和ArrayList的装箱拆箱、常见的泛型类型、泛型类和泛型方法、泛型约束、 泛型委托泛型很难理解?不然在接触的一个新的概念的时候,总会感觉难以理解,当你掌握并能熟练地使用的时候,发现这个概念其实简单的,我相信大多数码农都会有这种似曾相识的感觉。可能大多数人刚学习泛型的时候觉得很难理解,当然我也是这样的,所以便写下这篇文章加深一下对泛型的印象。

dotNet全栈开发 4万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

c#泛型使用详解:泛型特点、泛型继承、泛型接口、泛型委托

泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。在.NET类库中处处都可以看到泛型的身影,尤其是数组和集合中,泛型的存在也大大提高了程序员的开发效率。更重要的是,C#的泛型比C++的模板使用更加安全,并且通过避免装箱和拆箱操作来达到性能提升的目的。因此,我们很有必要掌握并善用这个强大的语言特性。 C#泛型特点: 1、如果实例

zdhlwt2008的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# 泛型

一.泛型所解决的问题及适用情形 假设我们声明了一个叫做MyIntStack的类,它实现了把一个int类型的值压入栈以及把它们弹出。 class MyIntStack { int StackPointer = 0; int[] StackArray; public void Push(int x) { //... } public int Pop() { //... } } 然后我们希望相同的功能应用于flo.

ฅ两脚喵ฅ的博客 3464

C#之泛型

一、概述一、概述泛型是用于处理算法、数据结构的一种编程方法。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以使它们能够直接用于软件构造。泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据的类型来进行参数化。泛型能在编译时提供强大的类型检查,减少数据类型之间的显示转换、装箱操作和运行时的类型检查。泛型类和泛型方法同时具备可重用性、类型安全和效率高等特性,这是非泛型类和非泛型方法无法具备的。泛型通常用在集合和在集合上运行的方法中。泛型主要是提高了代码的重要性。

互联网底层民工的博客 2944

C#入门级——泛型、泛型类、泛型接口、泛型方法和泛型委托

C#入门级——泛型、泛型类、泛型接口、泛型方法和泛型委托

dlwlrma_516的博客 5050

C# 中泛型编程之泛型类、泛型方法、泛型约束详解

类型Type现在可以表示带有特定类型的实参(或绑定类型)或未指定类型的泛型(或称未绑定类型)。委托级别的约束只在声明委托变量和实例化委托时使用,类似于在类型和方法的作用范围中实施的其他任何约束。同时子类中的泛型方法不能重复基类泛型方法的约束,这一点和泛型类中的虚方法重写是有区别的,代码如下。////错误 重写和显式接口实现方法的约束是从基方法继承的,因此不能直接指定这些约束。类型参数必须具有无参数的公共构造函数。3.在子类重复基类的约束(在使用子类泛型参数时,必须在子类级别重复在基类级别规定的任何约束)

u011555996的博客 2886

C#中泛型

泛型(generic)是C# 2.0推出的新语法,并不是语法糖,它是专门为处理多段代码在不同的数据类型上执行相同的指令的情况而设计的。泛型定义时,是延迟声明的:即定义的时候没有指定具体的参数类型,把参数类型的声明推迟到了调用的时候才指定参数类型。比如:方法和泛型混到一起,叫泛型方法,类和泛型混在一起叫泛型类,接口和泛型混到一起,叫泛型接口,等等。只是方法签名,没有方法体,默认是公开的,不能添加修改符。在C#中应用比较广的泛型:泛型方法,泛型类,泛型接口。泛型是一个复合类型,把多个类型混合一起作用,

2401_84642440的博客 2150

[C#]C# 泛型

型是为所存储或使用的一个或多个类型具有占位符(类型形参)的类、结构、接口和方法。泛型集合类可以将类型形参用作其存储的对象类型的占位符;类型形参呈现为其字段的类型和其方法的参数类型。泛型方法可将其类型形参用作其返回值的类型或用作其形参之一的类型。例如,创建泛型类的实例时,指定用于替代类型形参的实际类型。在类型形参出现的每一处位置用选定的类型进行替代,这会建立一个被称为构造泛型类的新泛型类。将得到根据你选择的类型而定制的类型安全类。例如,//...

FL1768317420的博客 917

C# 泛型编程之泛型类,泛型方法,泛型约束

  所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型。   泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。在定义泛型类时,在对客户端代码能够在实例化类时,可以用类型参数的类型种类施加限制。

weixin_42565127的博客 2245

C# 泛型讲解_泛型基础_C# Generic

C# 泛型讲解_泛型基础 一、C# 泛型概念 简介: 泛型是.NET Framework2.0新增的一个特性,在命名空间System.Collections.Generic,包含了几个新的基于泛型的集合类,官方建议.net 2.0 及更高版本的应用程序使用心得泛型集合类,而不使用非泛型集合类,例如ArrayList。 官方解释: 泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不

天马3798 1639

如此强大的C#泛型

一、什么是泛型 C# 语言和公共语言运行时 (CLR) 在 2.0 版本中添加了泛型。泛型将类型参数的概念引入 .NET Framework,这样就可以设计具有相同特征的类和方法:在客户端代码声明并初始化这些类和方法之前,这些类和方法会延迟指定一个或多个类型(使用占位符~3:数字代表类型参数个数) 二、泛型有什么用 使用泛型类型可以最大限度地重用代码、保护类型安全性以及提高性能。泛型最常见的用途...

dust__的博客 950

C#泛型

文章目录C#泛型简介C#可空类型:NullableC#泛型方法的定义及使用C#泛型类的定义及使用C#泛型集合定义及使用C# IComparable、IComparer接口:比较两个对象的值 泛型是在 System.Collections.Generic 命名空间中的,用于约束类或方法中的参数类型。 泛型的应用非常广泛,包括方法、类以及集合等。 C#泛型简介 在前面《C#集合》一节中介绍了集合,集合中的项允许是 object 型的值,因此可以存放任意类型的值。 例如,在 ArrayList 中以 double

weixin_42715287的博客 825
上一篇: 【C#基础教程】第二十章、事件
下一篇: 【C#基础教程】第二十二章、可空类型、匿名方法、迭代器
Ohrkaninchen
博客等级 码龄5年 18粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ohrkaninchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值