版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#应用知识一、C#中HashTable的用法(一)哈希表(Hashtable)简述在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.(二)哈希表的简单操作在哈希表中添加一个keyvalue键值对:HashtableObject.Add(key,value);在哈希表中去除
2、某个keyvalue键值对:HashtableObject.Remove(key);从哈希表中移除所有元素: HashtableObject.Clear();判断哈希表是否包含特定键key: HashtableObject.Contains(key);下面控制台程序将包含以上所有操作:csharpusing System;using System.Collections;/ file使用Hashtable时,必须引入这个命名空间class hashtablepublic static void Main()Hashtable ht=new Hashtable(); /file创建一个Hasht
3、able实例ht.Add(E,e);/添加keyvalue键值对ht.Add(A,a);ht.Add(C,c);ht.Add(B,b);string s=(string)htA;if(ht.Contains(E) /file判断哈希表是否包含特定键,其返回值为true或falseConsole.WriteLine(the E keyexist);ht.Remove(C);/移除一个keyvalue键值对Console.WriteLine(htA);/此处输出aht.Clear();/移除所有元素Console.WriteLine(htA); /file此处将不会有任何输出using Syste
4、m;using System.Collections;/ file使用Hashtable时,必须引入这个命名空间class hashtablepublic static void Main()Hashtable ht=new Hashtable(); /file创建一个Hashtable实例ht.Add(E,e);/添加keyvalue键值对ht.Add(A,a);ht.Add(C,c);ht.Add(B,b);string s=(string)htA;if(ht.Contains(E) /file判断哈希表是否包含特定键,其返回值为true或falseConsole.WriteLine(th
5、e E keyexist);ht.Remove(C);/移除一个keyvalue键值对Console.WriteLine(htA);/此处输出aht.Clear();/移除所有元素Console.WriteLine(htA); /file此处将不会有任何输出(三)遍历哈希表遍历哈希表需要用到DictionaryEntry Object,代码如下:csharpfor(DictionaryEntry de in ht) fileht为一个Hashtable实例Console.WriteLine(de.Key);/de.Key对应于keyvalue键值对keyConsole.WriteLine(de
6、.Value);/de.Key对应于keyvalue键值对valuefor(DictionaryEntry de in ht) fileht为一个Hashtable实例Console.WriteLine(de.Key);/de.Key对应于keyvalue键值对keyConsole.WriteLine(de.Value);/de.Key对应于keyvalue键值对value(四)对哈希表进行排序对哈希表进行排序在这里的定义是对keyvalue键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtabl
7、e提供某种规则的输出,可以采用一种变通的做法:csharpArrayList akeys=new ArrayList(ht.Keys); /file别忘了导入System.Collectionsakeys.Sort(); /file按字母顺序进行排序for(string skey in akeys)Console.Write(skey + );Console.WriteLine(htskey);排序后输出ArrayList akeys=new ArrayList(ht.Keys); /file别忘了导入System.Collectionsakeys.Sort(); /file按字母顺序进行排序
8、for(string skey in akeys)Console.Write(skey + );Console.WriteLine(htskey);排序后输出二、C#中字符、变量、注释详解1.输入、输出:(1).Console.Read():从输入流读入一个字符,至换行符结束;Console.ReadLine():从输入流读入一行字符,至换行符结束;(2).Console.Write():输出一行文本;Console.WriteLine():输出一行文本,并在结尾处自动换行;区别:是否换行(3).Console.ReadKey:从输入流读入一个字符。当程序执行到Consol.ReadKey()
9、时,会等待用户从键盘输入一个键,当用户输入之后才继续执行程序;2.C#中的注释:.单行注释:它只对当前行从“ / ”位置开始的文字做注释.多行注释:一“ /* ”开始到” */ “结束.文档注释:” / “ 通常对类和方法注释3.变量:(1)变量的命名规则:.变量名必须以字母和下划线"_"开头;.变量名只能以字母、数字、下划线、连接字符、组合字符、组成,不能包含空格等其他字符;.变量名不能与C#中的关键字、库函数同名,区分大小写;(2).变量的命名规范:.Pascal 命名法:Pascal表示法将标示符的首字符和后面连接的每个单词的首字母都大写例如:BackColor、My
10、Book.Camal命名法:也叫驼峰命名法,Camal表示法一小写字母开头,以后的单词每个字母都大写例如:myBook、redValue.如果使用的是英文的缩写,就全部用首字母大写(3).变量的声明:数据类型 变量名;(例如: int i ;)(4).变量的赋值:赋值运算符(=)右边的值赋给左边的变量;赋值号(=)左边和右边的数据类型必须一致例如:s=100;4、数据类型:值类型:(1).整形类型(sbyte、short、int、long、byte、ushort、uint、ulong)(2).浮点类型:单精度(float)和双精度(double)(3).小数类型:decimal(适合金融和货币
11、方面的运算,精度高)(4).布尔型:布尔类型是用来表示真和假这两个概念的,在C#中真和假分别用true和false两个值来表示(5).结构类型:结构类型一般定义形式为:sturct 结构名结构值表;(6).字符类型 :char常用转义符:/' :单引号/” :双引号/ :反斜杆/n :换行符/r ;回车/t :水平制表符5.数据类型自动转换:(1).通常是(范围)精度小的转换为精度(范围)大的,反之则不行(2).参与运算的操作数和结果类型须一致,当不一致时,如果满足下列两个条件时,也可以转换:.两种类型兼容;例如int类型 和double类型.目标类型要大于源类型6:强制类型转换:(1
12、).Parse方法:Parse方法可以实现将字符串型表达式转换成数值型;格式: 数值类型名称.(字符串型表达式) 例如:op=int32.Parse(txtA.text);(2).ToString方法:ToString方法将数值类型转换成字符串型,其返回值是Sting类型格式: 数值类型数据.ToString(); 例如:txtA.Text=result.ToString();注意:一切类型都可以转换成Sting类型(7).Try-Catch格式:try有可能出错的代码放在这里面catch对出错后进行处理的代码注意:如果try语句中没有出错,就不执行catch语句中的代码;如果出错了,程序就立
13、即停止,直接跳入catch语句值执行相关的代码8运算符:(1).算术运算符:(+、-、*、/、%、+、-)(2).关系运算符:(>、<、>=、<=、=、!=)(3).赋值运算符:(=、+=、-=、*=、/=、%=)(4).逻辑运算符:(|、!、&&)(5).条件运算符:(?:运算符称为条件运算符)例如:表达式?操作数1:操作数2 功能为:先检查表达式是否为真。如果为真,则计算操作数1,否则计算操作数2*在C#中,一元运算符的优先级高于二元运算符的优先级:注意(一直都是自己模糊的地方):自加和自减自加(+)有前加(例如:+age)和后加(例如:age+)自
14、减(-) 有前减(-age)和后减例子:int age=18;int sum=age+ -10在上面代码中,age是后加上的,所以在进行语句的运算时,age+取原值参与运算,所有sum=8;上面一段代码相当于:int age=18;int sum=age-10;age=age+1;总之,不管是+age还是age+,经过运算后,age的值都进行了+1 的运算三、C#自动内存管理自动内存管理是公共语言运行时在托管执行过程过程中提供的服务之一。 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。 对开发人员而言,这就意味着在开发托管应用程序时不必编写执行内存管理任务的代码。 自动内存管理可解
15、决常见问题,例如,忘记释放对象并导致内存泄漏,或尝试访问已释放对象的内存。 本节描述垃圾回收器如何分配和释放内存。分配内存初始化新进程时,运行时会为进程保留一个连续的地址空间区域。 这个保留的地址空间被称为托管堆。 托管堆维护着一个指针,用它指向将在堆中分配的下一个对象的地址。 最初,该指针设置为指向托管堆的基址。 托管堆上部署了所有引用类型。 应用程序创建第一个引用类型时,将为托管堆的基址中的类型分配内存。 应用程序创建下一个对象时,垃圾回收器在紧接第一个对象后面的地址空间内为它分配内存。 只要地址空间可用,垃圾回收器就会继续以这种方式为新对象分配空间。从托管堆中分配内存要比非托管内存分配速
16、度快。 由于运行时通过为指针添加值来为对象分配内存,所以这几乎和从堆栈中分配内存一样快。 另外,由于连续分配的新对象在托管堆中是连续存储,所以应用程序可以快速访问这些对象。释放内存垃圾回收器的优化引擎根据所执行的分配决定执行回收的最佳时间。 垃圾回收器在执行回收时,会释放应用程序不再使用的对象的内存。 它通过检查应用程序的根来确定不再使用的对象。 每个应用程序都有一组根。 每个根或者引用托管堆中的对象,或者设置为空。 应用程序的根包含全局对象指针、静态对象指针、线程堆栈中的局部变量和引用对象参数以及 CPU 寄存器。 垃圾回收器可以访问由实时 (JIT) 编译器和运行时维护的活动根的列表。 垃
17、圾回收器对照此列表检查应用程序的根,并在此过程中创建一个图表,在其中包含所有可从这些根中访问的对象。不在该图表中的对象将无法从应用程序的根中访问。 垃圾回收器会考虑无法访问的对象垃圾,并释放为它们分配的内存。 在回收中,垃圾回收器检查托管堆,查找无法访问对象所占据的地址空间块。 发现无法访问的对象时,它就使用内存复制功能来压缩内存中可以访问的对象,释放分配给不可访问对象的地址空间块。 在压缩了可访问对象的内存后,垃圾回收器就会做出必要的指针更正,以便应用程序的根指向新地址中的对象。 它还将托管堆指针定位至最后一个可访问对象之后。 请注意,只有在回收发现大量的无法访问的对象时,才会压缩内存。 如
18、果托管堆中的所有对象均未被回收,则不需要压缩内存。为了改进性能,运行时为单独堆中的大型对象分配内存。 垃圾回收器会自动释放大型对象的内存。 但是,为了避免移动内存中的大型对象,不会压缩此内存。级别和性能为优化垃圾回收器的性能,将托管堆分为三代:第 0 代、第 1 代和第 2 代。 运行时的垃圾回收算法基于以下几个普遍原理,这些垃圾回收方案的原理已在计算机软件业通过实验得到了证实。 首先,压缩托管堆的一部分内存要比压缩整个托管堆速度快。 其次,较新的对象生存期较短,而较旧的对象生存期则较长。 最后,较新的对象趋向于相互关联,并且大致同时由应用程序访问。运行时的垃圾回收器将新对象存储在第 0 级中
19、。 在应用程序生存期的早期创建的对象如果未被回收,则被升级并存储在第 1 级和第 2 级中。 本主题中稍后介绍了对象升级过程。因为压缩托管堆的一部分要比压缩整个托管堆速度快,所以此方案允许垃圾回收器在每次执行回收时释放特定级别的内存,而不是整个托管堆的内存。实际上,垃圾回收器在第 0 级托管堆已满时执行回收。 如果应用程序在第 0 级托管堆已满时尝试新建对象,垃圾回收器将会发现第 0 级托管堆中没有可分配给该对象的剩余地址空间。 垃圾回收器执行回收,尝试为对象释放第 0 级托管堆中的地址空间。 垃圾回收器从检查第 0 级托管堆中的对象(而不是托管堆中的所有对象)开始执行回收。 这是最有效的途径
20、,因为新对象的生存期往往较短,并且期望在执行回收时,应用程序不再使用第 0 级托管堆中的许多对象。 另外,单独回收第 0 级托管堆通常可以回收足够的内存,这样,应用程序便可以继续创建新对象。垃圾回收器执行第 0 级托管堆的回收后,会压缩可访问对象的内存,如本主题前面的释放内存中所述。 然后,垃圾回收器升级这些对象,并考虑第 1 级托管堆的这一部分。 因为未被回收的对象往往具有较长的生存期,所以将它们升级至更高的级别很有意义。 因此,垃圾回收器在每次执行第 0 级托管堆的回收时,不必重新检查第 1 级和第 2 级托管堆中的对象。在执行第 0 级托管堆的首次回收并把可访问的对象升级至第 1 级托管堆后,垃圾回收器将考虑第 0 级托管堆的其余部分。 它将继续
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 总经理岗位责任制度
- 戳学生复学责任制度
- 托幼点安全责任制度
- 技术人员安全责任制度
- 护厂队责任制度
- 报账员岗位责任制度
- 挖掘机司机安全责任制度
- 控辍保学工作责任制度
- 摊主卫生责任制度
- 放射源责任制度
- 汽轮机组试车方案
- 漆安慎力学第二版课后习题解答及漆安慎-力学答案
- PCI围术期强化他汀治疗的获益和机制课件
- 沥青搅拌站安全生产风险分级管控体系方案资料(2022-2023版)
- WTO海关估价协议中文版
- 【广东省】工作证明模板(仅供参考)
- YS/T 613-2006碳膜电位器用电阻浆料
- GB/T 33365-2016钢筋混凝土用钢筋焊接网试验方法
- GB/T 17626.10-2017电磁兼容试验和测量技术阻尼振荡磁场抗扰度试验
- GB/T 14536.6-2008家用和类似用途电自动控制器燃烧器电自动控制系统的特殊要求
- 《乡风文明建设》(王博文)
评论
0/150
提交评论