第一章
1).NET Framework的体系结构
VB | C++ | C# | J# | … | Visual Studio .NET |
公共语言运行库 | |||||
ASP.NET Web表单 Web服务 Mobile Internet Toolkit | Windows表单 | ||||
ADO.NET和XML | |||||
基类库 | |||||
公共语言运行库 | |||||
操作系统 |
2).NET Framework是一个与硬件无关的程序执行平台
3)MSIL 微软中间语言代码不专用于任何一种操作系统。程序运行时,由Just-In-Time(JIT)编译器二次编译成专用于当前操作系统和目标机器结构的本机代码,通过托管的CLR环境和基类库在计算机中执行。
4)创建执行。NET应用程序时经历的几个步骤:
(1)使用某种.NET兼容语言(如C#)编写应用程序代码。
(2)把应用程序代码编译为中间语言代码(MSIL),存储在程序集中。
(3)在执行代码时(如果这是一个可执行文件就自动运行,后者在其他代码使用它时运行),首先必须使用JIT编译器将中间语言代码编译为本机代码。以内为JIT编译器会确切地知道程序运行在什么类型的处理器上,可以利用该处理器提供的特性或特定的机器指令来优化最后的可执行代码。
(4)在托管的CLR环境下运行本机代码,以及其他应用程序或过程。
5)字符串常见操作
(1)取字符串长度 <string>.Length;
(2)字符串转为比特码 GetBytes(<string>)
(3)字符串相加 推荐StringBuilder sb = new StringBuilder();sb.Append(<string>);
(4)截断字符串的一部分 变量.SubString(起始位置,截取位数);
(5)查指定位置是否为空字符 char.IsWhiteSpace(字符串变量,位数);
(6)查字符是否是标点符号 char.IsPunctuation(‘字符’);
(7)把字符转化为数字,查代码点 (int)’变量’
(8)把数字转为字符,查代码代表的字符 (char)代码
(9)清除字符串前后包含的空格 变量.Trim()
(10)替换字符串:字符串变量.Replace(原字符串,新的字符串)
(11)删除字符串最后一个字符的3种方法
Eg:string s = “1,2,3,4,5,”;
a) s.SubString(0,s.Length-1)//删除最后一个逗号
b) s.ToString().RTrim(‘,’);//删除逗号,跟的变量是任何有效的字符串
c) s.TrimEnd(‘,’);//删除逗号,后面跟的变量是数组
char[] mychar={‘5’,’,’};//删除‘5‘以及’,‘
s.TrimEnd(mychar);
(12)Split的3种方法
a) 用单个字符来分隔 <string>.Split(new char[]{‘字符’}) // <string>.Split(‘字符’);
b) 用多个字符来分隔 <string>.Split(new char[2]{‘字符’,’’})
c) 用字符串来分隔 Regex.Split(<string>,”字符串”,RegexOptions.IgnoreCase);
(13)几种输出字符串的格式
12345.ToString(“n”); //生成12,345.00
12345.ToString(“C”); //生成¥12,345.00
12345.ToString(“e”); //生成1.234500e+004
12345.ToString(“f4”); //生成12345.0000
12345.ToString(“x”); //生成3039(16进制)
12345.ToString(“p”); //生成1,234,500.00%
(14)把123456789转换为12-345-6789的3种方法
(a)A = int.Parse(a).ToString(“##-###-####”);
(b)A = a.Insert(5,”-”).Insert(2,“-”);
(c)Using System.Text.RegularExpressions; //先引用
Regex reg = new Regex(@“^(d{2})(d{3})(d{4})$”);
A = reg.Replace(a,”$1-$2-$3”);
(15)输出21个A的简单方法 striing str = new string(‘A’,21);
(16)得到随机数的方法
Ramdom r = new Ramdom();
Int n1 = r.Next(); //返回非负随机整数
Int n2 = r.Next(10); //返回一个小于所指定最大值(10)的非负随机整数
Int n3 = r.Next()%10; //返回一个小于所指定最大值(10)的非负随机整数
Int n4 = r.Next(1,20); //返回一个指定范围(1~20)内的随机整数
Int n5 = r.NextDouble(); //得到一个介于0.0~1.0之间的随机整数
(17)Int32.TryParse(),Int32. Parse(),Convert.ToInt32()比较:
都是将字符串转换为整数数字
Int32.TryParse(string,out int);
Int = Int32. Parse(string);
Int = Convert.ToInt32(string);
比较:Convert.ToInt32()在null时不抛出异常而是返回零;Int32. Parse()会抛出异常;Int32.TryParse()不抛出异常,会返回true或false来说明解析是否成功。如果解析错误,则out调用放将会得到零值;
从性能上讲,Int32.TryParse()优于Int32.Parse(),而Int32.Parse()优于Convert.ToInt32()。
建议:在.NET1.1下用Int32.Parse();在.NET2.0下用Int32.TryParse()。
2010-3-1 进度P27至1。3
(1)C#使用new修饰符来实现隐藏基类成员。
2010-3-2 进度无。
1.在派生类中访问基类中的成员或方法一般有以下两种方法:
(1) C#通过base.<方法名>()的方式调用基类的方法成员。
(2) 通过显示类型转换。
2.C#使用new修饰符来实现隐藏基类成员。
2010-3-3 P34进度还真不是一般的慢哈哈
1. 要实现多个接口的相同名称的方法,必须在接口的实现部分注意以下两点。
a) 有相同名称的方法在实现时,前面不能加public等关键字。每个方法前必须冠以相应的接口名。
b) 对于不同名称的方法,前面必须冠以”public”标识符。
2. 创建派生类的实例时,如果调用某个接口的实现,则必须将实例强制转换为相应接口类型。
3. 定义委托的语法是:eg:deletegate void saydeletegate(name)
Delegate关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法
委托在编译时,会编译成类,所以在任何地方可以声明类的地方都可以声明委托。
4. 委托可以将多个方法赋给同一个委托,或者说将多个方法绑定到同一个委托,这就是多播委托。当调用这个委托的时候,将依次调用其所绑定的方法。
5. 事件:EventHandler是事件用于把处理程序(Button_Click)赋予事件(click)的委托。使用+=运算符把这个新方法添加到委托列表中。
事件委托方法定义:
1) 总是返回void类型。事件处理程序不能有返回值。
2) 参数。只要使用EventHandler委托,参数就应是object和EventArgs。
a) 第一个参数是引发事件的对象。
b) 第二个参数是包含有关事件的其他有用信息的对象。
6. Using之多变身
a) Using指令:格式:using 命名空间名字;
b) Using别名: using 别名 = 包括详细命名空间信息的具体的类型;
c) Using定义范围:即时释放资源,在范围结束时处理对象。到达using 语句末尾或者中途引发了异常并且控制离开了语句块,即触发cls1和cls2的dispose方法释放资源。
7. @符号的妙用
a) 字符串转义符eg:string s = “c:\\program files\\mocrosoft .net\\test.txt”;用@则:string s = @”c:\program files\microsoft .net\test.txt”;
b) 用@表示的跨行字符串eg:string s = @”line
Line2
Line3”;
String ss=@”
“;//从上一行跨到这行,中间并没有结束符或字符串连接符号
c) 保留关键字标识符:在C#规范中,@可以作为标识符(类名,变量名,方法名等)的第一个字符,以允许C#中保留关键字作为自己定义的标识符。
8. 预处理指令
2010-3-8 进度为P58貌似小进步了一点点,心情不好,反正不想读了,烦!
- 错误异常处理方法:即使代码抛出异常,并在catch块中添加了显示的return语句,finally块中的代码仍会被执行,finally块只需要一个try块,catch块的存在与否对其并没有影响。使用break,continue,return语句退出finally块都是非法的。
- 如果catch块中没有退出的代码(如throw,return),则catch块后的代码将继续得到执行,并且try块后面至少需要包含一个catch块或一个finally块。
- 页面级错误处理:在单独的页面中的错误,可以在page_error事件中添加处理逻辑代码,通过server.getlasterror()获取当前页面的错误。
Eg:
Protected void Page_Error(object sender, EventArgs e)
{
String errorMsg = “0”;
Exception currentError = Server.GetLastError();
errMsg = “系统发生错误:</br>”+
“错误地址:”+Request.Url.ToString()+”</br>”+
“错误信息:”+currentError.Message.ToString()+”<br/>”;
Response.Write(errMsg);
Server.ClearError();//注意这句代码的使用,清除异常。如果少了这个方法的话,仍然会发生Application_Error的错误处理。
}
- 应用程序级错误处理