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 中或工具类方法中经常能看到. ...
随机推荐
- StreamWriter 相关知识分享
在介绍StreamWriter之前,我们首先来了解一下它的父类TextWriter. 一.TextWriter 1.TextWriter的构造函数和常用属性方法 下面是TextWriter的构造函数: ...
- JavaScript Array返回值以及是否改变原数组。
1. push:最后一位新增://改变原数组 arr.push("123"); 返回值是数组的长度: var b = ...
- Dispatcher与UI线程交互
this.chart2.Dispatcher.BeginInvoke(new Action(() => { this.chart2.SetData("Series1", lx ...
- vue实现rsa加密,数字签名,md5加密等
一.使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客 *(原文处有一个地方不对,不需要转换+,rsa已经做过base64转码了) ...
- django-Views之request(二)
book/views.py def index(request): http_list = { '<h1>请求协议: <span style="color:red" ...
- react框架安装和使用
react 其实react跟vue差不多, 区别:vue- 双向数据绑定, react 单向数据绑定. 中文文档:https://react.docschina.org/ 第一步:安装方式,不能直 ...
- Xbim.GLTF源码解析(一):简介
原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10838972.html 简介 Xbim.GLTF是将IFC文件转换成GLTF文件的一个 ...
- expect实现自动输入密码功能
系统: Ubuntu:16.04 安装expect: sudo apt-get update sudo apt-get install expect 脚本实例: //这一行告诉操作系统脚本里的代码使用 ...
- 微信小程序的canvas和遮盖布颜色设置问题
canvas绘画出并显示小程序的逻辑首先是将网络图片转化为本地图片,其次再将进行绘画.将本地图片和二维码显示在画布上,最后将整个画布截图用api显示在屏幕上.真正的画图让他飞去屏幕外. 有时候会需要用 ...
- 智和网管平台SugarNMS助力网络安全运维等保2.0建设
智和信通智和网管平台SugarNMS结合<信息安全技术 网络安全等级保护基本要求>(GB/T 22239-2019)等国家标准文件以及用户提出的网络安全管理需求进行产品设计,推出“监控+展 ...