DotNET知识点总结四(笔记整合)
1、枚举:本质是类
- 如果为第一个枚举赋了一个int值,那么后面的枚举项依次递增
- 可以将枚举强转成他所代表的int值
- C#的枚举项都是常量(可以用Reflector查看literal的IL源码)
- 因为枚举项都有对应的int值,所以Switch把他当成int看
- 不能定义方法、属性、事件
- 多个枚举有相同数值时,数值强转时,会返回其中最后一个枚举项
2、IEnumerable接口
只要实现了该接口,就可以使用foreach进行遍历。foreach循环的本质就是调用这个接口返回一个迭代器,调用迭代器的MoveNext()方法就可以实现循环。
源码:
{
IEnumerator GetEnumerator(); //返回一个迭代器
} public interface IEnumerator
{
bool MoveNext();
object Current { get; }
void Reset();
}
以上不难看出:
IEnumerable接口中主要包括GetEnumerable方法(获取迭代器对象),MoveNext方法(检查是否存在循环的下一个元素),GetCurrent方法(获得当前循环到的元素)
3、集合
基本概念
集合就是能装一堆东西的容器。主要分为非泛型集合和泛型集合
ArrayList——里面真正存储数据的是一个Object[]数组,它对应的泛型是List<T>
HashTable——非泛型的键值对集合,它对应的泛型是Dictionary<TKey,TValue>
动态数组和泛型集合的不同点和优缺点:
动态数组对元素没有任何约束,想添加什么都可以。其根本原因是因为其内部存储数据的是一个Object类型的数组。
泛型集合是带元素类型约束的集合(对添加里面的元素有一个约束)
泛型集合避免了装箱、拆箱操作带来的性能损耗,在添加元素时参数类型进行检查
常用方法
add(), AddRange(), Insert(), InsertRange(), remove(), removeAt()
Reverse()——将集合中的元素反转
4、哈希表
内部机制:
HashTable,键值对集合,其内部是一个结构体数组bucket[]。有三个东西:键、值、键的哈西码
数据主要存储于:private bucket[] buckets;
private struct bucket
{
public object key;
public object val;
public int hash_coll;
}
存取操作:
存储的原理:下标是根据key的hash值算出来的。当我们向HashTable中Add元素时,元素储存在HashTable的数组里的下标是根据添加的Key的hash值算出来的(但因为hash值取模数组长度,所以肯定不会超过当前数组长度)。
每个对象算出来的Hashcode并不是唯一的。有可能出现多个对象的HashCode相同。解决机制:
a、再次hash一次
b、桶装模式,将两个相同hashcode的对象装入统一个位置
c、当新增时,HashTable里的容器数组已经满了,则以数组的两倍扩容
取值原理:当我们从HashTable里取元素时(根据key来取),会根据key的hash值算出要取的元素的下标,并比较元素里的key和当前要找的key参数的hash值是否相等,同时还要比较两个key的引用是否一致。如果都满足,则确定找到要取的元素。
5、泛型集合
引用名称空间:System.Collections.Generic
List<T>——T是存储的类型
Dictionary<K,V>
6、List<T>和ArrayList的性能比较
ArrayList存值类型需要装箱猜想,而存储引用类型需要类型转换,而List<T>很明显不需要这些额外的开销,高性能显而易见
7、try语句块的使用时机
网络操作(套接字),文件操作(IO相关),数据库操作,除法操作(除数为0的时候),强制类型转换操作
8、Windows Form程序相关文件
designer.cs设计类和前台两个类是兄弟类的关系(partial)
9、Path类
ChangeExtension(修改文件的后缀,“修改”支持字符串层面的,没有真的给文件改名)
Combine——将两个路径合成一个路径【自动处理路径分隔符的问题】
GetDirectoryName——得到文件的路径名
GetExtension——得到文件的扩展名
GetFileName——得到文件路径的文件名部分
GetFileNameWithoutExtension——得到去除扩展名的文件名
GetFullPath——得到文件的全路径,可以根据相对路径获得绝对路径
GetTempFileName——得到一个唯一的临时文件名
GetTempPath——得到临时文件夹的路径
…………
10、操作文件夹、目录
Delete——删除目录【recursive表示是否递归删除】
Exists——判断目录是否存在
move——移动
GetDirectories+得到一个目录下的子目录
GetFiles——得到一个目录下的文件
…………
11、操作文件
File——操作文件、静态类,对文件整体操作。拷贝、删除。剪切等
AppendAllText——将文本contents附加到文件path中【如果文件不存在,则创建】
Exists——判断文件path是否存在
ReadAllLines——读取文本文件到字符串数组中
ReadAllText——读取文本文件到字符串中
WriteAllText——将文本contents保存到文件path中,会覆盖旧内容
Copy——文件拷贝【true表示当文件存在时“覆盖 ”,如果不加true,文件存在时则报异常】
Create——创建文件
Delete——如果文件不存在则报错
DirectoryInfo——文件夹的一个“类”,用来描述一个文件夹对象
GetParent——得到目录的父目录
FileInfo——文件夹,用来描述一个文件夹对象
需要注意:
获取当前exe文件执行的路径用 Assembly.GetExecutingAssembly().Location ,不要用Directory.GetCurrentDirectory() ,因为获取的是程序当前工作目录,这个路径可能会变
修改文本编码通过GetEncoding获得该编码
12、文件流
FileStream——任意类型
StreamWriter——字符串写
StreamReader——字符串读
13、using语句的本质
本质是一个try{……}finally语句块
所有要使用Using关键字来释放资源的类必须实现IDisposable接口
Close执行了Dispose()并回收对象
使用Using语句块并不能抓住异常,因为Using里面只做了 try……finally操作,并没有catch语句块,所以在using语句块中还要自己加上try……catch块来捕捉异常
14、序列化与反序列化
Serialization特性
二进制格式化器
序列化:二进制格式化器,将对象里的字段及值以“文本”的方式保存成文本
[Serializable]
BinaryFormatter类方法
Serialize——对象graph序列化到stream中
Deserialize——将对象从stream中发序列化,返回值为反序列化得到的对象
序列化需要注意的:
a、呀序列化的类型必须标记为:[Serializable]
b、该类型的父类也必须标记为:[Serializable],反射的时候有一个参数必须是“是否寻找父类对象”
c、该类型中的所有成员的类型也必须标记为:[Serializable]
d、序列化只会对类中的字段序列号(只能序列化一些状态信息)
反序列化:二进制格式化器,先创建一个相同的对象,然后见“文本”里保存的字段的值设置到字段中。按照文本(字段、字段值、类名)信息里的类名,使用反射技术创建新对象,并将对一个字段的值设置到新的对象中
DotNET知识点总结四(笔记整合)的更多相关文章
- SpringSecurity权限管理系统实战—四、整合SpringSecurity(上)
目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...
- dotnet 读 WPF 源代码笔记 布局时 Arrange 如何影响元素渲染坐标
大家是否好奇,在 WPF 里面,对 UIElement 重写 OnRender 方法进行渲染的内容,是如何受到上层容器控件的布局而进行坐标偏移.如有两个放入到 StackPanel 的自定义 UIEl ...
- DotNET知识点总结五(笔记整合)
1.委托:通常指的是 多播委托 通常的说,委托就是一个存放方法指针的容器,是一个安全的函数指针,供程序员安全调用.委托的本质就是一个类,继承于MulticastDelegate——>Delega ...
- DotNET知识点总结三(笔记整合)
使用接口的注意事项: 接口中的成员不能加访问修饰符 接口中的成员不能有任何实现 实现接口的子类必须实现接口的全部成员 一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口 ...
- .NET知识点总结一(笔记整合)
1. .net framework原理简介,C#程序的两次编译 .NET源代码——>语言编译器(第一次编译)——>MSIL+元数据(exe文件)——>CLR(公共语言运行时——类 ...
- .NET知识点总结二(笔记整合)
19.什么是类型? 用来定义某一种数据在内存里开辟空间的大小,还可以预置操作此种类型数据的相关方法 20.this关键字在方法中使用时所代表的含义 this指的是当前类的对象,或者父类的类的对象(ba ...
- Spring学习笔记:spring与mybatis四种整合方法
1.采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数. (1)Spring配置文件: <!-- 引入jdbc ...
- Java开发学习(十四)----Spring整合Mybatis及Junit
一.Spring整合Mybatis思路分析 1.1 环境准备 步骤1:准备数据库表 Mybatis是来操作数据库表,所以先创建一个数据库及表 create database spring_db cha ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
随机推荐
- vs2010旗舰版产品密钥
Microsoft Visual Studio 2010(VS2010)正式版 CDKEY / SN: YCFHQ-9DWCY-DKV88-T2TMH-G7BHP 企业版.旗舰版都适用
- sql server 主从数据库同步 利用发布 订阅是实现
发布订阅功能自SQL 2005之后就有了 配置方法可参考:http://blog.csdn.net/wanmdb/article/details/7515277 遇到问题: 1. 如果代理无法启动 , ...
- 《Linear Algebra and Its Applications》-chaper1-线性方程组-线性相关性
这篇文章主要简单的记录所谓的“线性相关性”. 线性相关性的对象是向量R^n,对于向量方程,如果说x1v1 + x2v2 + …+xmvm = 0(其中xi是常数,vi是向量)有且仅有一个平凡解,那么我 ...
- JavaScript中依赖注入详细解析
计算机编程的世界其实就是一个将简单的部分不断抽象,并将这些抽象组织起来的过程.JavaScript也不例外,在我们使用JavaScript编写应用时,我们是不是都会使用到别人编写的代码,例如一些著名的 ...
- Android应用开发学习之图片切换器
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 如果我们要实现类似Windows的照片查看器切换上一张下一张照片的效果,可以使用图片切换器ImageSwitcher ...
- Java学习路线图·影响一代又一代程序员的经典书籍!(转)
转自:http://www.douban.com/group/topic/50353428/ 基础篇 ·Java核心技术 卷1 基础知识(原书第9版)最新版·中文版 第13届Jolt生产效率大奖获奖图 ...
- python_Opencv_绘图
opencv中也可以用一些函数来绘图 直接上源码,例子: # -*- coding: utf-8 -*- import numpy as np import cv2 # 黑色的图片 img=np.ze ...
- 错误处理:java.lang.NoClassDefFoundError: org/apache/taglibs/standard/tag/rt/core/ForEachTag
在使用JSP.Servlet进行开发时,遇到java.lang.NoClassDefFoundError: org/apache/taglibs/standard/tag/rt/core/ForEac ...
- 窥探 Swift 之 函数与闭包的应用实例
今天的博客算是比较基础的,还是那句话,基础这东西在什么时候 都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小 ...
- C#视频总结
C#视频利用了四天看完了,由于有VB的基础.所以看起来并没有感觉太吃力.在主要的数据类型.运算之间没有多大的差别. 在循环控制语句上也就是大同小异.在类.继承和多态方面可能有一些陌生,可是经过了前期的 ...