C#泛型自己的理解和总结
万事开头难,今天先从随笔开始,记录工作中平时不太注意到的知识点。今天开始说下泛型。
泛型在我们项目中很是常见,使用很广泛,我觉的它有以下几个优点。
1.安全性。
2.性能。
3.二进制代码的重用。
4.代码的扩展。
下面从代码方面分析下这些优点。
1.安全性。
这段代码只有运行起来的时候才会报错, 秉着错误得先发现的原则,这种写法不合适。
var text = new ArrayList();
text.Add();
text.Add("mystring");
foreach (int item in text)
{
Console.Write(item);
}
如果换成泛型,试试看。
var list = new List<int>();
list.Add();
list.Add("mystring");//会编译器会直接报错
2.性能。
同样使用非泛型集合,添加数据,并输出。 可以看出,添加进集合进行了装箱操作,赋值的时候又进行了拆箱操作。一装一拆性能就会影响性能。
var text = new ArrayList();
text.Add();
int a = (int)text[];
如果换成泛型,试试看。 泛型定义为int,int类型在编译器动态生成的类中使用,不会进行装箱和拆箱的操作。
var list = new List<int>();
list.Add();
int b = list[];
3.二进制代码的重用。
泛型可以使用多个类型来进行实例化。
var list = new List<int>();
list.Add();
var str = new List<string>();
str.Add("str");
var Studentclass = new List<Student>();
Studentclass.Add(new Student());
4.代码的拓展。
对不同的类型的泛型,进行实例化的时候,程序编译的时候,如果是引用类型,所有实例化的类都共用同一个本地类相同的实现代码,如果是值类型,会为每个值类型实例化一个新类。
第一次开始记录,有错误的地方,希望大家多多包涵。
C#泛型自己的理解和总结的更多相关文章
- Atitit 泛型原理与理解attilax总结
Atitit 泛型原理与理解attilax总结 1. 泛型历史11.1.1. 由来11.2. 为什么需要泛型,类型安全21.3. 7.泛型的好处22. 泛型的机制编辑22.1.1. 机制32.1.2. ...
- C# 泛型的简单理解(安全、集合、方法、约束、继承)
前言 泛型允许你在编译时实现类型安全.它们允许你创建一个数据结构而不限于一特定的数据类型.然而,当使用该数据结构时,编译器保证它使用的类型与类型安全是相一致的.泛型提供了类型安全,但是没有造成任何性能 ...
- C# 泛型的入门理解(来自网络)
using System.Collections; class Program { //做个比较 static void Main(string[] args) { //new对象 Cls a1 = ...
- 泛型< ? extends > <? super> 理解
public class Test { public static void main(String [] args){ Plate<? extends Fruit> p = new Pl ...
- C# 理解泛型
出处:http://www.tracefact.net/CSharp-Programming/Generics-In-CSharp.aspx 术语表 generics:泛型type-safe:类型安全 ...
- C#泛型理解(转)
[译]C# 理解泛型 PDF 浏览:http://www.tracefact.net/document/generics-in-csharp.pdf源码下载:http://www.tracefact ...
- java泛型的理解
总体介绍泛型: 1.泛型是计算机程序中一种重要的思维方式,它将数据结构和算法与数据类型相分离,使得同一套数据结构和算法,能够应用于各种数据类型,而且还可以保证类型安全,提高可读性.在Java中,泛型广 ...
- 【转载】C# 理解泛型
术语表 generics:泛型type-safe:类型安全collection: 集合compiler:编译器run time:程序运行时object: 对象.NET library:.Net类库va ...
- 如何理解 Java 中的 <T extends Comparable<? super T>>
Java 中类似 <T extends Comparable<? super T>> 这样的类型参数 (Type Parameter) 在 JDK 中或工具类方法中经常能看到. ...
随机推荐
- 百万年薪python之路 -- MySQL数据库之 存储引擎
MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 首先声明一点: 存储引擎这个概念只有MySQL才有. ...
- MongoDB系列---入门安装操作
MongoDB 学习大纲: 1.MongoDB简介与其它数据库对比以及数据类型 2.MongoDB安装 3.MongoDB简单操作 环境要求: Linux 一.MongoDB简介 1 什么是Mongo ...
- new Date插入mysql数据库时多了一秒
在使用new Date() 插入数据库时,查询出来比实际多了一秒,mysql 表字段设置为datetime类型,当时间精确到秒时,如果毫秒大于500时,会自动进位. 解决方法为格式化后再插入数据库.
- SQlite 日期时间总结
1. 时间串转时间戳,函数strftime,其参数1是固定'%s',参数2是待转换的时间串,参数3...是修饰符 (1)select strftime('%s','2004-01-01 02:34:5 ...
- mysql获取刚插入(添加)记录的自动编号id
我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的.但在多线程情况下,就不行了. 下面介 ...
- CSPS模拟 79
T1 建一颗新树,倍增 T2 WARNING:竞赛图如果有环,则最小环一定为三元环 (发现这个结论的这把都稳了) 然后三元环计数,发现部分分都是为了审出题意但是不会正解的人设的.. 由于对于任意一种方 ...
- CSPS模拟 58
爆炸 没算内存见祖宗 为什么偏偏这次卡内存我没算 T1 HashMap各种水 T2 智障背包!但是卡内存! T3 Dashspeed 考试用点分治+线段树水到了80 实际上是个没见过的套路题 在之前的 ...
- 表格导出到excel的样式消失该如何修改
工作中遇到一需求,要将后台的表格导出到excel后的表格样式该如何修改呢? 其实表格导出首先需要了解两个插件:jquery.table2excel.js和tableExport.js 1.第一步,写一 ...
- 华为OceanConnect物联网平台概念全景 | 我的物联网成长记
作者 | 我是卤蛋 华为云OceanConnect IoT云服务包括应用管理.设备管理.系统管理等能力,实现统一安全的网络接入.各种终端的灵活适配.海量数据的采集分析,从而实现新价值的创造. 华为云O ...
- C#中的取整函数
先放百度的 Math.Ceiling();向上取整 Math.Ceiling()向上取整: d = 4.56789 string res = Math.Ceiling(Convert.ToDecima ...