首页 > 编程语言 >c#泛型

c#泛型

时间:2023-08-18 19:55:33浏览次数:48  
标签:c# 数据类型 集合 GenericList Collections 类型 泛型

泛型是什么

  我们在编程程序时,经常会遇到功能非常相似的模块,只是它们处理的数据不一样。但我们没有办法,只能分别写多个方法来处理不同的数据类型。这个时候,那么问题来了,有没有一种办法,用同一个方法来处理传入不同种类型参数的办法呢?泛型的出现就是专门来解决这个问题的。

使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:

  • 它有助于您最大限度地重用代码、保护类型的安全以及提高性能。
  • 你可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。
  • 你可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
  • 你可以对泛型类进行约束以访问特定数据类型的方法。
  • 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。

举个栗子:

 1 // Declare the generic class.
 2 public class GenericList<T>
 3 {
 4     public void Add(T input) { }
 5 }
 6 class TestGenericList
 7 {
 8     private class ExampleClass { }
 9     static void Main()
10     {
11         // Declare a list of type int.
12         GenericList<int> list1 = new GenericList<int>();
13         list1.Add(1);
14 
15         // Declare a list of type string.
16         GenericList<string> list2 = new GenericList<string>();
17         list2.Add("");
18 
19         // Declare a list of type ExampleClass.
20         GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
21         list3.Add(new ExampleClass());
22     }
23 }

泛型类和泛型方法兼具可重用性、类型安全性和效率,这是非泛型类和非泛型方法无法实现的。 泛型通常与集合以及作用于集合的方法一起使用。 System.Collections.Generic 命名空间包含几个基于泛型的集合类。 非泛型集合在通常使用具体类型来指示列表中所存储项的类型的情况下,可使用类型参数 T。 其使用方法如下:

  • 在 AddHead 方法中作为方法参数的类型。
  • 在 Node 嵌套类中作为 Data 属性的返回类型。
  • 在嵌套类中作为私有成员 data 的类型。

泛型概述

  • 使用泛型类型可以最大限度地重用代码、保护类型安全性以及提高性能。
  • 泛型最常见的用途是创建集合类。
  • .NET 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。 应尽可能使用泛型集合来代替某些类,如 System.Collections 命名空间中的 ArrayList
  • 可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
  • 可以对泛型类进行约束以访问特定数据类型的方法。
  • 在泛型数据类型中所用类型的信息可在运行时通过使用反射来获取。

 

  

 

标签:c#,数据类型,集合,GenericList,Collections,类型,泛型
From: https://www.cnblogs.com/ff2223/p/17641480.html

相关文章

  • burpsuite靶场----SQL注入17----oracle之DNS外带
    burpsuite靶场----SQL注入17----oracle之DNS外带靶场地址https://portswigger.net/web-security/sql-injection/blind/lab-out-of-band-data-exfiltration正式开始payload模板:'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-......
  • C#.Net6 WebAPI制作简单自定义Token验证
    一、创建自定义类MyMiddleware继承中间件IMiddleware并实现接口二、在实现接口中的方法编写Token验证逻辑三、在WebAPI的Program类中的builder里注入自定义的类和app里配置自定义中间件builder.Services.AddScoped(typeof(MyMiddleware));app.UseMiddleware(typeof(MyMidd......
  • iwebsec-sql注入 10 双重url编码绕过
    01、题目分析依旧是对关键词进行了过滤,除了双写大小写等过滤方法还可以采用双重url编码,在SQL注入攻击中,双层URL编码绕过机制是一种黑客利用URL编码的漏洞绕过安全检查的手法。原始的URL编码是将特殊字符转换成%后面跟着它的ASCII值的十六进制表示。例如,'被编码为%......
  • iwebsec-sql注入 11 十六进制编码绕过
    01、题目分析这里对单引号双引号啥的进行了过滤,可以采用16进制编码进行绕过02、手工注入这个和上次的双重url编码有异曲同工之妙,不过这个编码就简单了,直接十六进制编码即可,这里采用的编码软件是CaptfEncoder-win-x64-3.1.2.exe,16进制编码主要是在引号方面--查询行数?id=1or......
  • iwebsec-sql注入 08 大小写过滤注入
    01、题目分析大小写过滤顾名思义,会对正常小写的sql语句进行过滤,这个时候只需要大写sql注入语句即可02、手工注入?id=-1UNIONSELECT1,2,3?id=-1UNIONSELECT1,2,DATABASE()?id=-1UNIONSELECT1,2,GROUP_CONCAT(TABLE_NAME)FROMINFORMATION_SCHEMA.TABLESWHERETABLE......
  • CF1575G GCD Festival 题解
    题意给定一个长度为\(n\)的正整数数列\(a\),求\[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\gcd\left(a_i,a_j\right)\times\gcd\left(i,j\right)\](\(1\len,a_i\le10^5\))。题解根据欧拉函数的性质,可以得出\[n=\sum\limits_{d\midn}\varphi(d)\]该......
  • iwebsec-sql注入 09 双写关键字绕过
    01、题目分析大小写过滤顾名思义,会对正常小写的sql语句进行过滤,这个时候只需要大写sql注入语句即可02、手工注入关键词绕过顾名思义,就是将一些sql注入中会用到的一些关键词进行过滤,本关是将select过滤了,那就双写写成seselectlect?id=1orderby3--id=-1就是不显示内容?id=......
  • iwebsec-sql注入 05 报错型注入
    01、题目分析:三大盲注中的报错型注入,02、sqlmap工具注入:一把梭python.\sqlmap.py-u"http://www.bdrwmy.cn:8001/sqli/05.php?id=1"--current-db--dump--batch03、手工注入:盲注,简单的来讲就是无论你输入什么内容,页面都不会出现错误提示,如果查询结果正确就显示类似......
  • Leetcode 1388. 3n 块披萨
    (本文只提供了解题思路的思考,原文作者题解连接)先把题目粘贴在这里给你一个披萨,它由3n块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨:你挑选任意一块披萨。Alice将会挑选你所选择的披萨逆时针方向的下一块披萨。Bob将会挑选你所选择的披萨顺时针方向......
  • 2. 会计恒等式 Accounting Equation
    投资人是企业所有者Owner借款给企业的人为债权人Credit'sEquity欠款为企业债务liabilitesAssets=Liabilites+Oner'sEquity资产=债务+所有者权益(AccountingEquation会计恒等式)这就是FinancialPosition财务状况,注意债务是正值它也是资产的一部分Assets......