.NET基础回顾(六)

一.HashTable

1. 比起集合效率高,取table中东西的时候,根据键值计算出哈希值来取,不需要一个一个遍历。

程序示例:

 1 static void Main(string[] args)
 2         {
 3             Hashtable table = new Hashtable();
 4             table.Add("1","a");
 5             table.Add("2", "b");
 6             table.Add("3", "c");
 7
 8             for (int i = 0; i < table.Count; i++)
 9             {
10                 Console.WriteLine(table[i]);
11             }
12
13             Console.ReadKey();
14         }

二.泛型

1. 微软框架也提供了List<T>泛型集合,和一般集合的用法类似,如下:

List<Person> list = new List<Person>();

list.Add(new Person());

2. 字典类型是特殊的HashTable 类型,需要指定键和值的类型,如下:

Dictionary<string,Person> dic = new Dictionary<string,Person>();

dic.Add(“1”,new Person());

dic[“1”].SayHi();

//遍历

foreach(string key in dic.Keys)

{

}

foreach(Person p in dic.Values)

{

}

Foreach(KeyValuePair<string,Person> pair in dic)

{

Console.WriteLine(pair.Key+”:”+pair.Value.SayHi());

}

三.异常捕获

1. 只把有可能发生异常的代码用try包围起来。

2. try代码里如果发生异常,就会立即跳到catch里面去执行,执行完成之后,继续往下执行,try里面代码没有发生异常则跳过catch继续往下执行。

程序示例:

3. catch后面的Exception用来接收发生异常的具体信息。

4. 可以自定义异常,如下:

 1 //自定义异常
 2 class MyException:Exception
 3 {
 4 public MyException(string msg):base(msg)
 5 {
 6 }
 7 }
 8 //主函数
 9 static void Main(string[] args)
10         {
11             int i = 1;
12             int j = 0;
13             int k = 0;
14             try
15             {
16                 if (j == 2 || j == 0)
17                 {
18                     throw new MyException("除数不能为0或2");
19                 }
20                 Console.WriteLine("666666");
21                 k = i / j;
22             }
23 //子异常类应该写在前面,优先捕获,Exception异常汇总对象放在最后
24             catch (MyException ex)
25             {
26                 Console.WriteLine("这是特殊的异常处理");
27             }
28             catch (DivideByZeroException ex)
29             {
30                 Console.WriteLine(ex.Message);
31             }
32             catch (InvalidOperationException ex)
33             {
34                 Console.WriteLine(ex.Message);
35             }
36             catch (Exception ex)
37             {
38                 Console.WriteLine(ex.Message);
39             }
40         }
41 //不用自定义异常,但是可以调用系统的异常类来抛出自定义msg
42         //static void Main(string[] args)
43         //{
44         //    int i = 1;
45         //    int j = 0;
46         //    int k = 0;
47         //    try
48         //    {
49         //        if (j == 2 || j == 0)
50         //        {
51         //            throw new Exception("除数不能为0或2");
52         //        }
53         //        Console.WriteLine("666666");
54         //        k = i / j;
55         //    }
56         //    catch (DivideByZeroException ex)
57         //    {
58         //        Console.WriteLine(ex.Message);
59         //    }
60         //    catch (Exception ex)
61         //    {
62         //        Console.WriteLine(ex.Message);//输出内容为"除数不能为0或2"
63         //    }
64
65         //    Console.ReadKey();
66         //}

5. try后面跟catch或者finally,不管有没有发生异常finally中代码都会被执行。

try…catch…finally

6. 程序练习:

 1 //因为p为引用类型,所以返回的p.Age值为2(可以到reflector里面反编译查看执行过程)
 2 static Person Test()
 3         {
 4             int i = 1;
 5             int j = 1;
 6             Peron p = new Person();
 7             p.Age = 1;
 8             try
 9             {
10                 int k = i / j;
11                 return p;
12             }
13             finally
14             {
15                 p.Age++;
16             }
17         }

四.单例模式

程序示例:

 1 class Person
 2 {
 3     public string Name{get;set;}
 4
 5     //1.私有化构造函数
 6     //2.提供一个私有的静态的Person类型的变量
 7     //3.提供一个公共的静态的方法,用于返回上面的变量
 8     private static Person p;
 9
10     public static Person GetSingle()
11     {
12         if(p == null)
13         {
14             p = new Person();
15         }
16         return p;
17     }
18
19     private Person()
20     {
21
22     }
23 }
24
25 static void Main(string[] args)
26 {
27     //其实p1,p2,p3所new出来的对象都指向同一个对象,存储一样的地址
28     //因为“private static Person p;”声明的Person p是静态的
29     Person p1 = new Person.GetSingle();
30     Person p2 = new Person.GetSingle();
31     Person p3 = new Person.GetSingle();
32 }
33
34
35
36 //简单应用:利用单例模式来使得MDI新增窗体只能有一个
37 //部分代码
38 public partial class FormAdd:FormAdd
39 {
40     private static FormAdd f;
41     public static FormAdd GetSingle()
42     {
43         if(f == null || f.Dispose)
44         {
45             f = new FormAdd();
46         }
47         return f;
48     }
49
50     private FormAdd()
51     {
52         InitializeComponet();
53     }
54 }

五.Path

程序示例:

 1 //Path类
 2
 3 //引入命名空间
 4 using System.IO;
 5
 6 //更改的是路径字符串的后缀名,不会更改实际的文件
 7 //结果是将"d:\1.txt"改成"d:\1.avi"
 8 string newPath = Path.ChangeExtension(@"d:\1.txt","avi");
 9
10 //合并多个字符串路径
11 newPath = Path.Combine(@"d:\12","12.txt");
12
13 //得到当前文件坐在文件夹的路径
14 newPath = Path.GetDirectoryName();
15
16 //得到指定文件路径的后缀名
17 newPath = Path.GetExtension(path);
18
19 //得到指定文件路径的文件名(文件名+后缀)
20 newPath = Path.GetFileName(path);
21
22 //得到指定文件路径的文件名(不包括后缀)
23 newPath = Path.GetFileNameWithoutExtension(path);
24
25 //获得绝对路径
26 newPath = Path.GetFullPath(path);
27
28 //得到临时文件名
29 newPath = Path.GetTempFileName();
30
31 //得到临时目录
32 newPath = Path.GetTempPath();

六.编码的发展

如图所示:

七.文件操作

程序示例:

 1 //文件操作
 2
 3 //向已有的文本文件中追加字符
 4 //没有这个文件的话,会创建一个新的文件
 5 File.AppendAllText(@"d:\2.txt","哈哈哈");
 6
 7 //复制文件
 8 File.Copy(@"d:\test\b\2.txt",@"d\test\a\3.txt");
 9
10 //删除文件,删除后不会存在于回收站中,慎用!
11 File.Delete(@"d:\test\b\2.txt");
12
13 //判断指定路径的文件是否存在
14 File.Exists(@"d:\test\b\2.txt");
15
16 //文件移动
17 File.Move();
18
19 //读文件,返回字符串
20 //可能会因为编码的问题出现乱码
21 string str = File.ReadAllText(@"d:\test\b\2.txt");
22 //可以指定读取文件时采用的编码方式
23 string str = File.ReadAllText(@"d:\test\b\2.txt",Encoding.Default);
24 string str = File.ReadAllText(@"d:\test\b\2.txt",Encoding.GetEncoding("GB2312"));
25
26 //返回字符串数组,每一行占一个元素
27 string[] lines = File.ReadAllLines(@"d:\2.txt",Encoding.Default);
时间: 2024-11-14 23:29:25

.NET基础回顾(六)的相关文章

java基础回顾(六)——ThreadPoolExecutor

先来看一下构造函数 1 public ThreadPoolExecutor(int corePoolSize, 2 int maximumPoolSize, 3 long keepAliveTime, 4 TimeUnit unit, 5 BlockingQueue<Runnable> workQueue, 6 ThreadFactory threadFactory, 7 RejectedExecutionHandler handler) { 8 if (corePoolSize < 0

【DAY26】JAVA 基础回顾

基础回顾 ---------------- 1.跨平台 os JVM : sandbox 1995 2.基本数据类型 byte //1 -128 ~ 127 short //2 -32768 - 32767 int //4 long //8 float //4 doule //8 char //2 boolean //1 3.引用类型 [] class interface 4.运算符 && //短路 || //短路 & // | // ^ //抑或,相同0,不同为1 >>

HTML/CSS基础教程 六

表单 包含表单元素的区域, 表单元素是允许用户在表单中(文本框, 下拉列表, 单选框, 复选框等)输入信息的元素, 使用<form>标签定义. 文本域与密码域 <form> Username: <input type="text" name="firstname"> <br /> Password: <input type="password" name="lastname"

Java web基础总结六之—— Cookie与Session

Java web基础总结六之-- Cookie与Session 当我们在使用浏览器与服务器进行会话的过程中,就必然会产生一些数据.这个时候就需要对数据进行保存.比如常见的购物网站购物车信息的保存.保存客户端与服务器会话数据的两种技术是Cookie与Session. 一.Cookie 1.什么是Cookie? Cookie是保存在客户端的,以name,value的形式保存.当用户使用浏览器访问服务器产生数据时,服务器程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去

【C++自我精讲】基础系列六 PIMPL模式

0 前言 很实用的一种基础模式. 1 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implementation)是通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏. 2 PIMPL优点 举例: //x.h class X { public: void Fun(); private: int i; //add int i; }; //c.h #include <x.h> class C { public: void Fun()

Linux基础回顾(2)——Linux系统分区二三事

问题来自Linux教材,答案自我整理难免会有不足之处.这是我Linux期末的总结 1. 一块硬盘上可以有几种类型的分区?各自可以有多少个?(各个分区能安装操作系统吗?) 硬盘分区有三种类型的分区:主分区,扩展分区,逻辑分区:一个硬盘最多能划分4个主分区,或者3个主分区加上一个扩展分区,扩展分区上可以划分多个逻辑分区(最多20个).能安装操作系统. 2.用户能否在安装过程中创建扩展分区呢? 分区工具在文件系统类型中没有提供扩展(extended)分区类型,即用户不能根据需要不能手工创建扩展分区.安

PHP移动互联网开发笔记(6)——MySQL数据库基础回顾

最近看了一些架构方面的资料,但是发现基础知识都不怎么牢固,接下来的一段时间,我会定期总结基础知识. 一.数据类型 1.整型 数据类型 存储空间 说明 取值范围 TINYINT 1字节 非常小的整数 带符号值:-128~127 无符号值:0~255 SMALLINT 2字节 较小的整数 带符号值:-32768~32767 无符号值:0~65535 MEDIUMNT 3字节 中等大小的整数 带符号值:-8388608~8388607 无符号值:0~16777215 INT 4字节 标准整数 带符号值

[C#] C# 基础回顾 - 匿名方法

C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ≥ C# 3.0 的版本中,我们会用 Lambda 表达式进行取代匿名方法,并且用 Lambda 表达式作为编写内联代码的首选方式,因为它更简洁. 匿名方法是,顾名思义,匿名方法就是没有名称的方法.匿名方法最明显的好处就是:可以降低额外另写一个方法的工作量:另外一个好处就是可以直接访问调用者的变量,

java基础(六)

JAVA基础(六) 数组 数组是一组相关变量的集合. 数组是一组相关数据的集合,一组数据实际上就是一连串的的变量,数组按照使用可以分为一维数组.二维数组.多维数组. 数组能够进行一组数据的管理. 一维数组的定义:     类型 数组名[] = new 数组名[数组长度]; 一维数组的读取:    数组名[下标] = input.next(); 一个数组的最大索引号(下标)是它的元素个数(数组的长度)-1 获得数组长度:数组名.length 数组中每一个元素类型都是一样的 若要取出或写入数组中指定

NHibernate 组件基础 (第六篇)

NHibernate 组件基础 (第六篇) 一.组件简介 组件(Component)可以理解为被一个对象所包含的对象而持久化,而并非一个实体.简单说来,假如数据库有FirstName,LastName这两个字段,我们在C#中可以将这两个字段提取出来作为一个Name对象使用. 示例,首先建一张表,并添加数据如下: Person.hbm.xml <?xml version="1.0" encoding="utf-8" ?> <hibernate-map