dotnet02_C#程序设计基础

上传人:ll****x 文档编号:243022562 上传时间:2024-09-14 格式:PPT 页数:21 大小:78.50KB
返回 下载 相关 举报
dotnet02_C#程序设计基础_第1页
第1页 / 共21页
dotnet02_C#程序设计基础_第2页
第2页 / 共21页
dotnet02_C#程序设计基础_第3页
第3页 / 共21页
点击查看更多>>
资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第二章 C程序设计基础,1,第一个C#程序Hello,World,!,创建控制台应用程序,完整对象路径命名空间名.类名,例如,如何访问System.Text.StringBuilder类?,System.Text.StringBuilder,using System.Text;,Console.WriteLine(“Hello,World!”);,调试运行F5, 非调试运行CtrlF5(忽略断点),2,CTS(Common Type System)是一个所有.NET语言都支持的,数据类型,(或者说中间语言(IL)中使用的预定义数据类型)的,集合,,确保这些语言可以相互传送数据,体现了.NET语言的互操作性。,值类型,直接存储其值,存储在,堆栈Stack,中;而,引用类型,存储,对其值的引用,,存储在运行库托管,堆heap,中。,我们必须在设计类型的时候就决定类型实例的行为。这种决定非常重要,用,CLR via C#,作者,Jeffrey Richter的话,来说,“,不理解引用类型和值类型区别的程序员将会给代码引入诡异的bug和性能问题,(I believe that a developer who misunderstands the difference between,reference types,and,value types,will introduce subtle bugs and performance issues into their code.)”。这就要求我们正确理解和使用值类型和引用类型。,关于正确理解和使用值类型和引用类型,参见,C的值类型和引用类型,3,具体的值类型和引用类型见课本P31 P38,C数据类型不过是CTS类型的别名而已。,如,,int只不过是System.Int32的马甲(别名),而已,即int i; 可以用 System.Int32,i; 代替,Framework Design Guidelines,一书中说:我们要,避免在标志符中使用语言特有的名字(别名),来称呼它们。因为别名没有增加任何价值,反而引起了大量的混淆。,所以,常用的Convert.ToInt32()而不是ToInt(),Convert.ToInt64()而不是ToLong()。,4,C#的命名规范,参见 (VS.80).aspx,标识符 大小写方式 示例,类PascalAppDomain,接口Pascal,I,Disposable,方法PascalToString,命名空间PascalSystem.Drawing,参数CameltypeName,属性PascalBackColor,枚举类型PascalErrorLevel,枚举值PascalFatalError,事件PascalValueChanged,异常类PascalWebException,只读的静态字段PascalRedValue,5,装箱boxing 拆箱unboxing,装箱,将一个,值类型,实例,转换为,一个相同内容的,引用类型,实例,当想把值类型实例作为某方法(参数定义为引用类型)的参数时,装箱发生,基于CLR的语言隐藏了装箱过程,程序员不需显式转换,但带来性能上的问题,例:,int i = 1;,object o = i;,/ boxing,int j = (int) o;,/ unboxing,拆箱,装箱的逆过程,需显式转换,如果应用程序频繁地把值类型变量作为对象处理,最好最初使用引用类型声明。,6,类型转换,隐式转换,编译器自动进行,byte bData = 20; int iCount = bData;,int iCount = 20; byte bData = iCount ;,编译通过,报错,为什么?,显式转换,上面的错误怎么修改才能编译通过?,int iCount = 20;,byte bData = (byte)iCount ;,但是,显示转换时可能会发生截断或溢出。,7,强制转换,数值字符串,数值,如,”123”,123,Convert类:,将一个基本数据类型转换为另一个基本数据类型,string str = 123;,int i =,Convert.ToInt32,(str);,Console.WriteLine(“Int32: 0”, i);,Parse方法: 将数字的字符串表示形式转换为它的等效 32 位有符号整数。一个指示操作是否成功的返回值。,string str = 123;,Int32 int32Val;,Int32.TryParse,(str, out int32Val);,Console.WriteLine(Int32: 0, int32Val);,数值,数值字符串,如,123,”,123,”,Convert.ToString(),方法,各数值类型的ToString()方法,8,String to DateTime,string str = 2008-2-10 11:00:00;,DateTime dt = new DateTime();,dt =,DateTime.Parse,(str);,Console.WriteLine(DateTime: 0, dt);,DateTime to String,dt = System.DateTime.Now;,String MyString;,MyString = dt.ToString();,Console.WriteLine(DateTime: 0, dt);,9,字符串常用操作,字符串常用操作,自学,Length属性、ToCharArray()方法(打散)、SubString()方法(截取)、IndexOf()(字符匹配)、PadLeft()(填充)、Replace()、Splite()、Format()、Concat()、Join()等,System.Text.StringBuilder类:4个以上字符串连接时,更高的性能,string returnNumber = ;,for(int i = 0; i1000; i+),returnNumber = returnNumber + i.ToString();,String 对象一旦生成不可改变(Immutable).每次使用System.String类中的方法时,都要在内存中创建一个新的字符串对象,而且为该新对象分配新的空间。,原来的内存空间等待垃圾回收器回收。,10,S,tring returnNumber = ;,StringBuilder sb = new StringBuilder();,DateTime startDateTimeString;,DateTime startDateTimeStringBuilder;,TimeSpan ts;,startDateTimeString = DateTime.Now;,returnNumber = ;,for (int i = 0; i 10000; i+),returnNumber = returnNumber + i.ToString();,ts = DateTime.Now.Subtract(startDateTimeString);,Console.WriteLine(String: 0, ts.Milliseconds);,startDateTimeStringBuilder = DateTime.Now;,for (int i = 0; i 10000; i+),sb.Append,(i.ToString();,returnNumber =,sb.ToString();,ts = DateTime.Now.Subtract(startDateTimeStringBuilder);,Console.WriteLine(StringBuilder:0, ts.Milliseconds);,运行结果:,String: 359,StringBuilder: 15,11,集合,一定要谨慎选择 System.Collections 类,当需要,大小可按需动态增加,,并希望,通过索引来进行访问,的数组的时候,使用,ArrayList,.,当需要一个能实现,后进先出,的集合时,使用,Stack,.,当需要一个,先进先出,的集合时,使用,Queue,.,当需要一个可以,按Key值来查询,的数组是,使用,Hashtable,.,当需要一个,按顺序排列,的集合时,SortedList,.,12,C#的控制结构,foreach语句,允许迭代(iterates)某个集合(Collection)类型内的所有元素,string arrString = Tom,Jack,Mickey;,foreach (string s in arrString),Console.WriteLine(s);,int arrList = 1,2,3,4;,foreach (int i in arrList),Console.WriteLine(i);,for语句和foreach语句的区别:,for的代码块中可以更改迭代元素的值,而foreach不能,foreach比for有,更快的执行效率,13,类,与Java类基本相同,C类内可包含,字段( Attribute ),、方法和,属性( Property ),属性,使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码,如,class TimePeriod,private double seconds;,public double Hours,get return seconds / 3600; ,set seconds = value * 3600; ,14,class Program,static void Main(),TimePeriod t = new TimePeriod();,/ Assigning the Hours property导致 set 访问器(accessor)被调用.,t.Hours = 24;,/ Evaluating the Hours property导致get访问器( accessor)被调用.,System.Console.WriteLine(Time in hours: + t.Hours);,尽量不要公开字段,属性是更好的选择,。,15,C#接口,一个类实现了某个接口,就相当于声明其,能够完成某项工作,。比如一个类实现了IComparable接口,就相当于声明了它可以完成对自身实例进行比较的工作。,举个例子:某公司有一台特殊打印机,还可以使用一年,一年后可能换为另一种打印机,这两种打印机都特殊而贵.所以现在的程序希望换了打印机后也少量修改就可用.方法:1,定义一个打印机接口.2,定义打印机类A,B,分别实现此接口.3,定义一个工厂类,在类中可选择返回由A实现的接口,或者由B实现的接口.4,在程序中使用打印机时,就可以使用工厂类来调用打印机,而不需要知道具体的是什么打印机.,如果打印机换了,只需要修改工厂类就行,了.如果有一千个地方都调用过打印机,就不需要一个一个修改.修改一个地方就行了.接口充当一个隔离层的作用.,16,interface IPrint,bool PrintData(string data);,class CanonPrint : IPrint,public virtual bool PrintData(string data),/,具体业务逻辑,Console.WriteLine(data);,return true;,class HPPrint : IPrint,public virtual bool PrintData(string data),/,具体业务逻辑略,Console.WriteLine(data);,return true;,17,class PrintFactory,public IPrint CreatePrint(),/,返回一个由打机类,A,或,B,实现的接口,比如,return new HPPrint();,static void Main(),PrintFactory myFactory = new PrintFactory();,IPrint myPrint = myFactory.CreatePrint();,myPrint.PrintData(,接口的使用,);,18,C#的多继承,C+的多继承会导致程序结构的混乱,在C#中以接口技术代替了多继承,代码也更清晰,C#类可实现一个或多个接口,但至多只能继承一个类(,单继承,多接口,),using System ;,interface ICloneable, object Clone( ) ; ,interface IComparable, int CompareTo(object other) ; ,class ListEntry: ICloneable, IComparable,object ICloneable.Clone( ) ,int IComparable.CompareTo(object other) ,19,反射,可以使用反射动态创建类型的实例,,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。,/ Using GetType to obtain type information,:,int i = 42;,System.Type type = i.GetType();,System.Console.WriteLine(type);,/ Using Reflection to get information from an Assembly:,System.Reflection.Assembly o = System.Reflection.Assembly.Load(mscorlib.dll);,System.Console.WriteLine(o.GetName();,20,用户名:sukunstu,密码:lm,21,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!