作者:HoerenRegen | 来源:互联网 | 2023-09-14 16:58
一.HashTable1.比起集合效率高,取table中东西的时候,根据键值计算出哈希值来取,不需要一个一个遍历。程序示例:1staticvoidMain(string[]
一.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
)
9 {
10 Console.WriteLine(table[i]);
11 }
12
13 Console.ReadKey();
14 }
二.泛型
1. 微软框架也提供了List泛型集合,和一般集合的用法类似,如下:
List list = new List();
list.Add(new Person());
2. 字典类型是特殊的HashTable 类型,需要指定键和值的类型,如下:
Dictionary dic = new Dictionary();
dic.Add(“1”,new Person());
dic[“1”].SayHi();
//遍历
foreach(string key in dic.Keys)
{
}
foreach(Person p in dic.Values)
{
}
Foreach(KeyValuePair 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);