思胜.net高级培训基础视频3学员笔记_第1页
思胜.net高级培训基础视频3学员笔记_第2页
思胜.net高级培训基础视频3学员笔记_第3页
思胜.net高级培训基础视频3学员笔记_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大家在学习过程中有任何技术问题可以提问到思胜地址: HYPERLINK http:/w/forum/forum http:/w/forum/forum.技术问题版块,思胜帮大家免费解决,大家一起学习,共同进步!foreach ()的时候里面的主体必须是要支持支持System.Collections.IEnumerable1、 可迭代/ C# 中语法糖/ foreach 关键字中使用的集合,/ 必须实现接口 System.Collections.IEnumerable foreach (string name in list) /组合Console.Wriine(name);/ 为了支持遍历,返

2、回一个支持遍历的接口的对象/ 迭代器public System.Collections.IEnumeratetEnumerator()/ 创建一个用来迭代这个集合的迭代器对象MyLinkedListEnumerator enumerator= new MyLinkedListEnumerator(this.header); return enumerator;namespace LinkListSample/ 专门用来迭代 MyLinkedList 的迭代器public class MyLinkedListEnumerator: System.Collections.IEnumeratorpr

3、ivate Node header; private Node current;/ 当然要与的 MyLinkedList 有紧密的关系/ 要求构造函数中得到列表中的 header 指向的节点public MyLinkedListEnumerator( Node header )this.header = header; this.current = this.header;public object Currentgetif (Object.ReferenceEquals(this.header, this.current)throw new System.InvalidOperationEx

4、ception(在当前值之前,必须 MoveNext.);return this.current.Name;public bool MoveNext()bool isExist = false;if (this.current.Next != null)this.current = this.current.Next; isExist = true;return isExist;public void Reset()this.current = this.header;2、 using ()就是要支持System.Idis集合的问题 :eable(1)System.Collections.Ie

5、numerator 遍历 current 、 movwnext、resetusing System.Collections.Generic; System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。接口的实例,盲人摸象。大柱子,扇子,绳子,肚子,棍子,从不同的角度去认识和理解它,从基类派生,不可改变。从很多角度去看问题。通过接口来了解集合的诞生。对大家要有的帮助。(2)Icollection copy to count 定义所有非泛型结合的大小(有索引,赋予数组特性,基于数组的列表),枚举数和同步方法。Copy to 将

6、链表存在数组 indexcount,publicerface ISet : System.Collections.IEnumerable, System.Collections.ICollection/void Add(object obj); bool Contains(object obj);void clear();但是还是不能使用索引(集合的逻辑结构)只读的 获取个数数组(物理的结构)的是length多线程 一个线程没问题, 动态,但是数值却是不行的。一半在操作,一半在遍历,如何解决这些问题?就是线程同步,就需要一个同步对象。所以为了操作性更好,所以很多时候选择了集合而不是数组。(3)

7、Ilist 接口(高级的数据结构,不是高级的物理法。结构),表示可按照索引单独的对象的非泛型集合(索引器)。代表一个列表,增加了很多的方Add、 clear、 contains(包含) 、copyto、 GetEnumerator、 Indexof、 Insert 、Remove Remove at 。属性:count Item 索引器(看起来很像数组),比数组要灵活,而且还有集合的机动性。ArryList 的使用大小一开始是 4 个 但是这个仅仅是内部的一个成员。当超过了 4 个的时候,容量那就是变成 8 个,但是是以 2 的倍数放的,但是会带来性能的损失。就是先集合在数组在集合再数组地运转

8、,数据结构越高级,效率会降低,但是功能越来越强悍。那么怎么去解决这个的问题呢?MS 还是定义了好几个构造函数了,里面根据参数的不同,可以实现出不同的 arrylist,它内部是一个在集合与数组的相互的切换,所以要优化程序的话还是要好好了解内部 运行与执行的机制。内部成员是 object 的类,所以可以是任意的类型,要是要添加属于自己的类型的话我建议还是重写一下 tostring 的方法。但是老师的这个例子 froeach 都是取出的是 object 类型的 所以 list 中最好还是要放同种类型的东西。存什么就拿出什么强制类型转换,.net 是一个强类型的语言,也就是说每一个变量所存的数据都是

9、有类型的。强类型的语言就是预先检查错误,保证程序的安全运行。那么就是遵循万物皆有类。因为 class 的存在,时候微软就推出 object 的基类对象。那么可以创造出属于自己的类型。但是游客继承多态,那么在实际状况的使用的时候会变得复杂一些。所以这个这个现在的 object P = new();所以存进去得还是那个对象,但是存进去的时候还是转换代 object 的基类对象。但是由于 object 的区别的抹平性,所以会有点/所以这里的 string 还是强制的类型转换的foreach (string name in list)Console.Wriine(name);,因为拿出来的还是 obj

10、ectforeach (object obj in list) /组合/强制类型转换cast,但是这个是错得,是有条件的,即是类型本来就是要符合(是object,但是就不是string类型,所以还是要理解清楚,所以就是装箱与拆箱的问题,所以类型转换有两个基本的特点,一个是小byte到大看关键点)String name=(string)obj;,另一个是类型相合,比如:就是确实不是string,启示,看问题要Console.Wriine(name);还有一个类型转换 引出 as 但不是强制类型转换foreach (object obj in list) /组合/as,用于类型,如果类型不相容会返

11、回一个空,那就是什么也没有,同常在as之后加上一个判断,以得到转换是否成功String name = obj as string;Console.Wriine(name);装箱与拆箱(类的转换的理解)其实就是为一个堆栈里的值,装一个壳,放到的堆里面,减少内存的占用的问题(其实也就是为了把值类型的数据放进 arrylist,而且取出来还是,这样就为了保持数据的完整性,但是会牺牲一部分的性能,因为每一个值,都是一个对象)也就是利用了 object 来处理值(堆栈,而托管的堆是类型的内部数据的)类型的传递的问题Java 采取的办法是,再创建一个类,定义一个包装的类,就是每一个值的对象就要一个包装的类

12、的对象。C# 装箱其实就是由系统帮助创建一个对象实例,就是直接赋值,其实数据没用从堆栈移走。从 arrylist 取出来的都是对象;我放进去是一个值,拿出来就是对象了?到了之后,箱子就没用了但是也不知道本来得类型,但是要是对象是对象装箱的,那么系统就会知道这个被装箱的对象的类型。就是说,知道与它的实际类型匹配的话,直接用强转换 cast 就可以拆箱取值。字典 table 就是一个关键字对应一组数据。Key 键 value 值,一对一对的就称为条目。支持遍历,其实返回是一个条目类型。本身是条目的集合,有 keys 的集合,也有 values 的集合List 可以放,但是拿得时候就悲催了,字典就是

13、根据 key 来找到 values ,那么就不用数下标,可以拿到一个标识顺利地拿到的对象。字典的结构是 hash 哈希,字典其实就是为了找,通常内部不会按 list 来存,逻辑结构是:链表集合。一般的算法是稳定算法,那么哈希的精妙在与杂凑,先创建一块大得空间给你,根据你要加的数据,来算出要存在哪,怎么算呢?hash 算法。不是根据存数据的位置算得,是根据 key 的哈希算法算出存在哪的下标位置,下次要查询的时候再次根据的的哈希算法算出的位置就直接获取到需要插选的对象。就是说利用二层逻辑存在对应的内存单元,就是内存与其他资料建立关联,这样就不用去查找了,直接匹配就好了。#region 绑定到tx

14、tBianHao的调拨自动public string SelectDiaoBoZiDongBianHao(M.JXC_CangKuDiaoBo_TianJia myDiaoBonTianJia )Dictionary MyDictionary = new Dictionary();MyDictionary .Add (type,new SqlParameter (type,SqlDbType.);MyDictionary.Add(DiaoBoZiDongBianHao, new SqlParameter(ZiDongBianHao, SqlDbType.NVarChar, 150);MyDic

15、tionary type.Value =myDiaoBonTianJia .ZiDongBianHaoType1 ;MyDictionary DiaoBoZiDongBianHao.Direction=ParameterDirection .Output ;return Convert.ToString(DAL.SQLHelper.ExecuteScalar(XiTong_ShengChengZiDongBianHao, DiaoBoZiDongBianHao);#endregiondType.StoredProcedure, MyDictionary,直接上汇编来写,那么编译器倒不如直接用

16、hash 表,去的位置,所以这个就可以减少了很多的遍历的时间。Hashtable 的办法位置重复的时候如何解决?拉链算法,搞一个链表那么一个位置就可以存好几个。GeshCode();与字典的关系 看起来一样的,但是 hashcode 不一样,所以在字典里面的还是不同的。所以除了 equals()还要重写 GeshCode 的方法所以比较相等的 euqals GeshCode 还有运算符重载 3 种 方法/ 判断两个对象是否值相等,也就是说,是否代表同样的含义/ Object 的默认实现是判断是否同一个对象实例/ 不是同一个对象实例就不会相等public override bool Equals

17、(object obj)if (obj = null)/ 不可能return false;other = obj as if (other = null)/ 与自己不是同一种类型return false;return .Equals();/ 将会继承 GeshCode 方法/ 为了能够在字典中作为 Key 的时候,也可以含义相等/ 必须重写 GeshCode 方法public overrideGeshCode()返回该字符串的哈希代码。return .GeshCode();哈希表黑洞,修改了值之后,就很难拿回来了,特别市 key 是类型的,哈希表黑洞,就是修改了以为类对象为 key 的条目的那

18、个类对象里面的值,那么本身哈希表的 value 不变,但是哈希表的 key 会变成新的修改也只能是对象找出是根据 key,而是先照到原来的,在修改里面的 value还有一种叫做 set,但是本身还是一个集,lsit 是有序的,可以重复的;set 是就是数学上讲的集合,就是由就行,不可以重复一样的数据借助与字典来搞一个模拟出一个 set数独的原理,就是把数据用数字表示的解决方案的问题,对象的建模(领域对象)也就是先出题在 解题的问题。 就是先定义首先是因为是有序的问题 所以我还是觉得用 po小关联集合常见的接口都归纳一般1、 public class MyLinkedListEnumerator: System.Collections.Ienumerator 迭代器接口 current当前object 、movenext 下一个bool、reset 返回 void2、public class MyLinkedList4: System.Collections.Ienumerable 支持迭代接口 ublic System.Collections.IEnumeratetEnumerator() 返回的是一个接口 关联foreach3、System.Collections.Icollection 集合接口 cou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论