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容器获取 ...
随机推荐
- Struts Hello World Example
In this tutorial we show you how to develop a hello world web application using classic Struts 1.3 f ...
- javascript日期格式化方法汇总
本文给大家汇总介绍了javascript格式化日期时间的几种常用方法,个人对最后一种个性化输出时间比较有兴趣,基本上只要项目中能用到都是使用这种,推荐给小伙伴们. 方法一: ? 1 2 3 4 5 6 ...
- IllegalStateException
例1 public static void main(String[]sdf){ List<String> list = new ArrayList<String>(); li ...
- sql server转移tempdb数据库的物理存放位置
转移前将原来的文件备份一下 将 tempdb 从其在磁盘上的当前位置移动到其他磁盘位置.由于每次启动 MSSQLSERVER 服务时都会重新创建 tempdb,因此不需要从物理意义上移动数据和日志 ...
- UI进阶 科大讯飞(1) 语音听写(语音转换成文字)
一.科大讯飞开放平台: http://www.xfyun.cn/ 注册.登录之后创建新应用. 因为本项目只实现了语音听写,所以在SDK下载中心勾选语音听写单项SDK就可以了 开发平台选择iOS,应用选 ...
- C# 使用ping命令
方法一:调用cmd 的ping命令 private static string CmdPing(string strIp) { Process p = new Process(); p.StartIn ...
- 更改VisualStudio默认创建类和接口不加public问题
由于VisualStudio创建类和接口时,默认的是不加public关键字的,而我们大多数时候创建的类都是public的,于是,为了更好工作觉得改之. 首先找到在VisualStudio安装目录下路径 ...
- ASP.net 服务器监控
参考代码: 1,页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SMP ...
- HTML要点(五)<iframe>标签
浏览器支持:全部支持 定义和用法 iframe 元素会创建包含另外一个文档的内联框架(即行内框架). HTML 与 XHTML 之间的差异 在 HTML 4.1 Strict DTD 和 XHTML ...
- Linux下 如何正确配置 Nginx + PHP
假设我们用PHP实现了一个前端控制器,或者直白点说就是统一入口:把PHP请求都发送到同一个文件上,然后在此文件里通过解析「REQUEST_URI」实现路由. 一般这样配置 此时很多教程会教大家这样配置 ...