C# 知识点记录

1、decimal

表示128位数据类型
同浮点型相比,decimal类型具有更高的精度和更小的范围,使其更适合于财务与货币运算。

2、动态程序集

没有被编译至主程序,而是主程序在运行时动态调用或者生成的程序集。

C#加载程序集的机制:
一个C#应用程序在遇到当前应用程序域(AppDomain)里没有的程序集时,会自动搜索与应用程序在同一目录里的所有程序集,如果没有,抛出异常。
所以如果当我们的动态程序集放到和应用程序在同一个目录里时,不会产生序列化和反序列化的问题,而一旦我们把各种功能的程序集放到不同的内层文件时,在处理反序列化的时候需要额外的一些操作才能实现。

3、Excel的读取
  • OleDB

优点:将Excel直接当做数据源处理,通过SQL直接读取内容,读取速度较快。
缺点:读取数据方式不够灵活,无法直接读取某一个单元格,只有将整个sheet页读取出来后(结果为DataTable),再在Datatable中根据行列数来获取指定的值。当Excel数据量很大时,会非常占用内存,当内存不够时会抛出内存溢出的异常。

  • Com组件

通过添加Microsoft.Office.Interop.Excel引用实现
优点:能够非常灵活的读取Excel中的数据,用户可以灵活的调用各种函数进行处理。
缺点:基于单元格的处理,读取速度较慢,对于数据量较大的文件最好不要使用此种方式读取。需要添加相应的DLL引用,必须存在此引用才可使用,如果是Web站点部署在IIS上时,还需要服务器机子已安装了Excel,有时候还需要为配置IIS权限。

  • NPOI

NPOI是POI项目的.NET版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。使用NPOI就可以在没有安装OFFICE或者相应环境的机器上对WORD、EXCEL文档进行读写。
优点:读取Excel速度较快,读取方式操作灵活
缺点:需要下载相应的插件并添加到系统引用当中。

注意:
读取Excel时可能会需要修改注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel
数值名称:TypeGuessRows(Excel读取数据列的格式,是按照每一列前8个数据的类型来判断写时的类型的
数值数据:8,将8改为0。
IMEX = 1将强制混合数据转换为文本,但是仅仅这种设置并不可靠,它只确保在某列前8行数据至少有一个文本项的时候才起作用。

4、委托

委托(delegate)是一种存储函数引用的类型
委托的声明非常类似于函数,但不带函数体,使用关键字delegate。
委托的声明指定了一个返回类型和一个参数列表。
delegate double ProcessDelegate(double param1, double param2);
定义委托后,就可以声明该委托类型的变量
ProcessDelegate process;

5、const 和 readonly
  • const和readonly的值一旦初始化都不可再改写;
  • const只能在声明时初始化,readonly既可在声明时初始化也可在构造器中初始化;
  • const隐含static,不可再写static const; readonly则不默认static,如需要可以写static readonly;
  • const是编译期静态解析的常量(因此其表达式必须在编译时就可以求值);readonly则是运行期动态解析的常量;
  • const既可用来修饰类中的成员,也可修饰函数体内的局部变量;readonly只可以用于修饰类中的成员。
6、内部类

内部类,顾名思义是在一个类里面再定义一个类,这时候涉及到访问外部类和内部类的字段权限的问题。

  • 1、首先是内部类的类访问权限有pubIic,protected和private。内部类的类访问权限只是针对外界而言的。因为无论内部类的类访问权限是什么,即使是private类,对于外部类而言,内部类都是它的一个成员,外部类都可以访问到内部类,但是不一定能访问到内部类里面的成员。
    区别在于,当内部类的类访问权限为public时,外界对内部类可以以outerClass.innerClass方式,如outerClass.innerClass inn = new outerclass.innerClass()来实例化内部类;当内部类为private时,外界无法直接访问到内部类,只能通过一个公开的外部类方法来访问到内部类。
  • 2、内部类的成员属性的访问权限有pubIic,protected和private,注意此时对于内部类的成员来说,外部类已经是属于外面了,更不用说外界了,所以外部类的成员只能访问pubIic,protected的内部类成员,不能访问被private修饰的内部类成员;反过来,对于内部类来说,外部类的一切成员都可以直接访问。
  • 3、成员属性分为静态和非静态,即静态字段,静态方法和非静态字段,非静态方法。和普通类机制一样,要访问内部类或外部类的静态成员时,不必实例化类,因为静态成员是属于类的;但是,对于非静态成员而言,必须经过实例化后才能访问。
7、集合
  • 数组列表(ArrayList)
    ArrayList可以存储任何类型,不像List泛型那样有严格要求,List<T>更有效,ArrayList就相当于是List<object>
    ArrayList类对象被设计成为一个动态数组类型,其容量会随着需要而适当的扩充,方法:
    1、Add() 向数组中添加一个元素
    2、Remove() 删除数组中的一个元素
    3、RemoveAt(int i) 删除数组中索引值为i的元素
    4、Reverse() 反转数组的元素
    5、Sort() 以从小到大的顺序排列数组的元素
    6、CIone() 复制一个数组
    System.Collections命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位
    数组、哈希表和字典)的集合。System.Collections.Generic命名空间包含定义泛型集合的接
    口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性
    和性能。System.Collections.Specialized命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。
  • 列表(List)
    可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法,在决定
    使用List还是使用ArrayList类(两者具有类似的功能)时,记住List类在大多数情况下执行得
    更好并且是类型安全的。如果对List类的类型T使用引用类型,则两个类的行为是完全相同的。
    但是如果对类型T使用值类型,则需要考虑实现和装箱问题。
    如果对类型T使用值类型,则编译器将特别针对该值类型生成List类的实现。这意味看不必对
    List对象的列表元素进行装箱就可以使用该元素,并且在创建大约500个列表元素之后,不对列
    表元素装箱所节省的内存将大于生成该类实现所使用的内存。
  • 哈希表(HashTable)
    • 简述
      在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写的,value用于存储对应于key的值。Hashtable中key/value的键值对均为objec类型,所以Hashtable可以支持任何类型的key/value键值对。
    • 简单操作
      在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
      在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
      从哈希表中移除所有元素:HashtableObject.Clear();
      判断哈希表是否包含特定键key:HashtableObject.Contains(key);
  • 字典
    Hashtable和Dictionary<K,V>类型
    1、单线程中推荐使用Dictionary,有泛型优势,且读取速度较快,容量利用更充分;
    2、多线程中推荐使用Hashtable,默认Hashtable允许单线程写入,多线程读取对Hashtable进
    一步调用Synchronized() 方法可以获得完全线程安全的类型,而Dictionary非线程安全,必须
    人为使用lock语句进行保护,效率大减。
    3、Dictionary有按插入顺序排列数据的特性(注:但当调用Remove()删除过节点后顺序被打乱),因此在需要体现顺序的情境中使用Dictionary能获得一定方便。
    Hashtable应用场合:做对象缓存,树递归算法的替代,和各种需提升效率的场合。Hashtable中的key/value均为object类型,由包合集合元素的存储桶组成。存储桶是Hashtable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。每一存储捅都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。Hashtable的优点就在于其索引的方式,速度非常快。如果以任意类型键值访问其中元素会快于其他集合,特别是当数据量特别大的时候,效率差别尤其大。
  • 其他
    排序列表(sortedList)
    与哈希表类似,区别在于sortedList中的Key数组是排好序的
    名-值集合(NameValueCollection)
    NameValueCollection与Hashtable很类似,但是他们还是有区别的,Hashtable的KEY是唯
    一的,而NameValueCollection则不唯一
    堆栈(stack)
    表示对象的简单的后进先出非泛型集合。Push方法入栈,pop方法出栈
    队列(Queue)
    队列先进先出,enqueue方法入队列,dequeue方法出队列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值