C#高级特性
1、接口
接口与抽象基类。抽象类与接口的不同是,抽象类不仅可以定义多态接口还可以定义一些其他的成员以及构造函数。而接口只能包含抽象成员。
抽象父类创建多态接口,只有派生类才可以。而往往很多情况下非派生类使用相同的多台接口。接口可以被任何层次结构、任何命名空间或程序集的任何类型来实现。接口有较高级别的多态性。
接口不指定修饰符,因为所有的接口定义都是隐式公共和抽象的。
接口不能定义字段,可以定义属性、事件、索引器。
4、泛型
非泛型集合存在的问题:
(1)、非泛型----装箱与拆箱问题
将值类型表示为引用类型----装箱:显式地将值类型分配给System.Object变量的过程
反之操作为----------------拆箱:把保存在对象引用中的值转换回栈上的相应值类型。
//定义一个值类型
int myInt=20;
//将此值类型装箱转换为引用类型,即从栈到堆
Object boxedInt = myInt; //拆箱
int unBoxedInt = (int)boxedInt;
注:拆箱与强制类型转换不同,拆箱后必须能回到其装箱前的数据类型,若检测到数据类型不符,则 将抛出InvalidCastException异常,为了确保安全,每个拆箱操作都应被包裹在try/catch逻辑中。有一些操 作Object对象的类,如ArrayList,为其增加值类型的元素时,默认会进行隐式转换。再如:WriteLine
装箱和拆箱一个整数的步骤:
必须在托管堆上分配一个新对象
基于栈数据的值必须被转移到新分配的内存位置
拆箱时,保存在堆对象中的值必须转移回栈
堆上无用的对象会被回收
方便的同时这种方式同时带来了堆/栈内存转移而导致性能问题,并且缺乏类型安全。
(2)、非泛型---类型安全问题
非泛型集合实现的都是Object类,这样在其中存储的类型安全的,因此可以包含任何类型。
为了解决这些问题,自.Net 2.0后引入了泛型,System.Collections.Generic类。使用.NET 2.0以上的项目应该放弃使用传统的集合类System.Collections
注意:只有类、结构、接口和委托可以使用泛型,枚举类型则不可以使用。
5、泛型类List<T>
C#高级特性的更多相关文章
- ActiveMQ中的Destination高级特性(一)
---------------------------------------------------------------------------------------- Destination ...
- Python3学习(二)-递归函数、高级特性、切片
##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...
- 云端卫士实战录 | Java高级特性之多线程
<实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...
- javascript高级特性
01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_ ...
- Visual Studio 2015 速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- Android TextView高级特性使用
TextView一般都是用来显示一段文本,这里说的高级特性主要是一些我们平常不太常用的属性.包括文字阴影.自定义字体.html嵌入多格式.字体加粗.插入图片.这些特性平时开发APP的时候,可能一般使用 ...
- Python的高级特性8:你真的了解类,对象,实例,方法吗
Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...
- Python的高级特性7:闭包和装饰器
本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...
- VQuery高级特性
VQuery高级特性 css方法 同时设置多个--for in 链式操作 链式操作 函数,链式操作 css 方法链式操作 json的使用 阻止冒泡,默认事件 VQuery插件 插件机制 可以扩展库的功 ...
- Spring框架学习[IoC容器高级特性]
1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...
随机推荐
- C# Keynote
[C# Keynote] 1. Main 方法必须包含在一个类内,参数类型.返回值类型可以有多种变化. // Hello1.cs public class Hello1 { public static ...
- <<海闻电子发票接口 ESB 封装文档>>
<<海闻电子发票接口 ESB 封装文档>> 章节目录结构: 发票验证接口 发票开具接口 ESB请求地址: 发票验证接口: http://10.15.22.120:8866/42 ...
- POJ3468 A Simple Problem with Integers(线段树延时标记)
题目地址http://poj.org/problem?id=3468 题目大意很简单,有两个操作,一个 Q a, b 查询区间[a, b]的和 C a, b, c让区间[a, b] 的每一个数+c 第 ...
- [Linux]常用命令与目录全拼
命令缩写: ls:list(列出目录内容)cd:Change Directory(改变目录)su:switch user 切换用户rpm:redhat package manager 红帽子打包管理器 ...
- js判断滚动方向
//页面滚动监听事件 window.onscroll = function (e) { scrollFunc(); $("#t&quo ...
- Spring优势
* 使用spring有什么好处? ◆Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB.如果你仅仅使用了Struts或其他的包含了J2EE特有APIs的framework,你会发现S ...
- yum update Transaction Check Error
update系统时,发现其中一台server居然提示: Transaction Check Error:file /usr/lib/perl5/5.8.8/CGI.pm from install of ...
- jquery自定义方法
总结: * jQuery中添加自定义或函数方法1,如 $.fn.extend({'aa':function(){}}) 或 jQuery.fn.aa=function(){}, 这种调用时就得这样,$ ...
- 当spring 容器初始化完成后执行某个方法 防止onApplicationEvent方法被执行两次
在做web项目开发中,尤其是企业级应用开发的时候,往往会在工程启动的时候做许多的前置检查. 比如检查是否使用了我们组禁止使用的Mysql的group_concat函数,如果使用了项目就不能启动,并指出 ...
- C#对HTML转译需要注意的问题
在做B/S程序时我们多少会用到一点HTML特殊符号转译. 如:“&”——>“&” , "<"——>"<" , " ...