【c#基础】泛型

1:减少代码的选项可以是用Object类,也可以使用泛型

但是Object类进行类型传递不是类型安全的。泛型类使用泛型类型保证了类型安全。

泛型类 泛型方法 泛型接口、结构、委托

泛型优点:

1:性能

装箱和拆箱很容易使用,但性能损失比较大。

泛型的话在编译的时候就会动态生成我们定义他的类型,这样就不用进行装箱和拆箱。

var list=new List<int>();

上面这一句的话编译的时候就会编译成对应的int类型了,所以在运行的时候不用在进行装拆箱操作了。

2:类型安全

就是说你定义了一个List<int>() 这边只能添加int类型的数据不允许你添加其他类型,向ArrayList() 就可以 同时添加int string等不同类型。这样在调用的时候如果定义的是int类型,但是取到的是string 类型这样运行就会报错。

3:二进制代码的重用

泛型允许更好的重用二进制代码。泛型类可以定义一次,并且可以用去多不同的类型实例化。

4:代码扩展

泛型类的定义会放在程序集中,所以用特定泪I型那个实例化泛型类不会在IL代码中复制这些 类。

在JIT编译器把泛型类编译为本地代码时,会给每个类型创建一个新类,引用类型共享同一个本地类的所有相同实现代码,因为引用类型在实例化的泛型类中只需要4个字节内存地址(32位系统),就可以引用一个类型。值类型包含在实例化的泛型类的内存中,同时因为每个值类型对内存要求都不同,所以要为每个值类型实例化一个新类。

 泛型命名要点:

当要给一个泛型赋默认值的时候可以使用default(T); 当是引用类型的话就会默认值为null,值类型的话默认值就是0.

协变和抗变

协变和抗变是指对参数和返回值的类型进行转换。

参数类型协变:

例如:就是如果定义一个基类Shape和子类Rectangle,有一个方法以Sharp作为参数

但是作为shape基类的子类Rectangle可以作为参数传递给这个方法。

 

方法返回类型是抗变的:

当方法返回一个Shape,不能把它赋于Rectangle,因为Shape不一定总是Retangle.反过来是可行的。 

原先.Net4之前泛型是不支持协变和抗变的,之后就在支持了,但是使用方式有点不一样

泛型类型用out关键字标注,泛型接口就是协变的。这意味着返回类型只能是T.

接口IIndex于类型T是协变的,并从一个自读索引器中返回这个类型

泛型接口的抗变:

用In关键字标识

 泛型结构

与类一样,结构也可以是泛型,只是没有继承特性。

泛型结构Nullable<T>. 通常就是可空符号 ? 和空合并运算符 ??

 

泛型方法也可以重载

 泛型方法所调用的方法是在编译期间就已经定义了,而不是运行期间。

转载于:https://www.cnblogs.com/SignX/p/11029356.html

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

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

相关文章

nacos怎么修改服务分组_nacos服务注册如何配置分组?

同问&#xff0c;度娘一番&#xff0c;没找到答案&#xff0c;最终看的代码&#xff0c;大概知道怎么回事了。这个是下面引用源码的版本org.springframework.cloudspring-cloud-starter-alibaba-nacos-discoverycom.alibaba.nacosnacos-client0.2.2.RELEASEcom.alibaba.nacosna…

使用brew,cask和jenv在MacOSX上设置多个Java JRE / JDK

昨天在Java9的Jigsaw HackTheTower事件中&#xff0c;我意识到我需要加强我的游戏并改善我现有的机制&#xff0c;以在我的机器上维护几个不同的JDK。 我曾经手动下载jdk&#xff0c;或使用brew cask安装它们&#xff0c;我会在〜/ bash_profile上设置bash alias来在不同的 JA…

Codeforces - 102222C - Caesar Cipher

https://codeforc.es/gym/102222/my 好像在哪里见过这个东西&#xff1f;字符的左右移还是小心&#xff0c;注意在mod26范围内。 #include<bits/stdc.h> using namespace std; typedef long long ll;inline int read() {int x0;int f0;char c;do {cgetchar();if(c-)f1;} …

python os.path.exists判断文件或文件夹是否存在

import os#判断文件夹是否存在 dir os.path.exists(C:\\Users\\Desktop) print(dir:, dir)#判断文件是否存在 file os.path.exists(C:\\Users\\Desktop\\雍正王朝.txt) print(file:, file)运行结果 显示该文件及文件夹都存在

vue进入页面执行的钩子函数_解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题...

项目需求&#xff1a;图片加载时&#xff0c;当鼠标滚动至当前图片进行加载并加上上滑特效&#xff0c;实现这个效果需要对文档文档滚动位置和图片的当前位置进行比较。但是mounted 钩子函数执行时img图片并未加载出来也就是占位为空&#xff0c;导致图片位置计算出问题。解决这…

微服务(Microservices)和服务网格(Service Mesh)架构概念整理

微服务&#xff08;Microservices&#xff09; 在过去的 2016 年和 2017 年&#xff0c;微服务技术迅猛普及&#xff0c;和容器技术一起成为这两年中最吸引眼球的技术热点。而以 Spring Cloud 为代表的传统侵入式开发框架&#xff0c;占据着微服务市场的主流地位。 微服务&…

python os.listdir列举当前文件夹下所有文件及文件夹

import ospath C:\\Users\\Desktop\\test str os.listdir(path) print(str)运行结果&#xff1a;1、2为文件夹&#xff0c;123.txt为文件

正则查找倒数第二个符合条件的字符串_EXCEL正则表达式的基础语法

正则表达式的基本概念及用途了解之后&#xff0c;我们就来学习下具体的语法&#xff0c;先以一个简单的例子来讲解。基础语法&#xff1a;比如&#xff0c;A1单元格中有一串字符&#xff1a;aabbccddaabbcc&#xff0c;我们要把其中的a找到&#xff0c;然后替换成o。代码如下&a…

javafx css样式_使用CSS设置JavaFX饼图样式

javafx css样式渲染图表时&#xff0c; JavaFX默认提供某些颜色。 但是&#xff0c;在某些情况下&#xff0c;您想自定义这些颜色。 在此博客文章中&#xff0c;我将使用一个示例来更改JavaFX饼图的颜色&#xff0c;该示例打算在今天下午在2013年RMOUG培训日的演示中包括。一些…

java 异步操作

/** * 异步删除 * * param keys */ public void asycExecute(String keys) { ExecutorService executor Executors.newFixedThreadPool(1); CompletableFuture<String> future CompletableFuture.supplyAsync(new Supplier<String>() { Override public String g…

企业发文的红头文件_【红头文件写作格式】 公司红头文件格式范本

红头文件写作格式 一、红头文件的制作及标准进行页面设臵选择“文件”——“页面设臵”选择“页边距”附签&#xff0c;上&#xff1a;3.7厘米&#xff0c;下&#xff1a;3.5厘米&#xff0c;左&#xff1a;2.8厘米&#xff0c;右&#xff1a;2.6厘米。选择“版式”附签&#x…

matlab 城市间最短路径

clear all;clc;close all; %最短路径代码&#xff0c;输入&#xff1a;起点空格终点&#xff08;大写字母&#xff0c;如:A F&#xff09; % 输出最短路径值d 最短路径路线 % W为一个对称矩阵&#xff0c;如果不能直接到达距离为inf % 本例中A到B距离为12; A到F距离为0; B到…

docker开放的端口_关于docker自动开放端口解决方案

在docker中只要有容器映射了端口docker就会自动加iptablesiptables -L -nChain DOCKER (8 references)target prot opt source destinationACCEPT tcp -- 0.0.0.0/0 172.18.0.2 tcp dpt:2379ACCEPT tcp -- 0.0.0.0/0 172.18.0.5 tcp dpt:8888ACCEPT udp -- 0.0.0.0/0 172.18.0.…

即将举行的网络研讨会:调试生产中Java的5种最佳实践

您的团队是否花费超过10&#xff05;的时间在生产环境中调试Java&#xff1f; 将新代码部署到生产中是一项艰巨的任务。 在您的本地环境中起作用的东西在生产中的作用并不相同&#xff0c;您可以通过用户来了解。 不理想吧&#xff1f; 生产中的调试是一个关键要素&#xff0…

保存网页上没有 另存为图片 选项的方法

找到要存储的图片&#xff0c;并点击右键查看源代码 找到图片地址&#xff0c;复制到新的浏览器里打开 将图片 另存为 转载于:https://www.cnblogs.com/lszw/p/11040047.html

BP算法,用梯度下降法更新权值W与偏置项b

Bp算法实际是输出的误差函数对每一个参数求导&#xff0c;输出层可以直接求出&#xff0c;非输出层则有链式法则求导。这里以上图5层神经网络为例进行说明。 一 符号说明&#xff1a; 1)这里使用激活函数为sigmoid函数&#xff1a; &#xff08;1&#xff09; 对sigmoid函数…

字典生成工具_CANOpen系列教程09_CANOpen对象字典

说明&#xff1a;本文原创作者『strongerHuang』首发于微信公众号『嵌入式专栏』&#xff0c;同时也更新在我的个人网站&#xff1a;EmbeddedDevelop标签&#xff1a;CAN、 CANOpen、 CanFestival一、写在前面上一篇文章主要是引导大家学习CANOpen协议通信接口的相关内容。通信…

Java命令行界面(第4部分):命令行

我在Java中进行命令行解析的系列的第四部分介绍了Commandline &#xff0c;它被描述为 “用于解析命令行参数的Java库”&#xff0c;它“基于使用注释从命令行参数到对象的映射”。 像以前介绍的args4j和jbock一样&#xff0c; Commandline使用注释来提供潜在命令行选项的“定…

Dijkstra 计算两地间的最短距离

这里使用Dijkstra(戴克斯特拉)算法&#xff0c;该算法起始点实际计算出到任一点的距离&#xff0c;计算两城市间的距离实际是一个副产物&#xff0c;所有一下图为例来说明&#xff0c;该图为无向图&#xff0c;顶点间所标数字即为两点之间的距离。 问题&#xff1a;求点D到点A的…

Sequence

题目链接&#xff1a;http://dsalgo.openjudge.cn/binarytree/12/ 总时间限制: 3000ms 内存限制: 65536kB描述给定m个数字序列&#xff0c;每个序列包含n个非负整数。我们从每一个序列中选取一个数字组成一个新的序列&#xff0c;显然一共可以构造出n^m个新序列。接下来我们对每…