欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    dotnet02C#程序设计基础.ppt

    • 资源ID:70107106       资源大小:235.49KB        全文页数:31页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    dotnet02C#程序设计基础.ppt

    第二章C程序设计基础第一个第一个C#程序程序Hello,World!n创建控制台应用程序创建控制台应用程序n完整对象路径命名空间名完整对象路径命名空间名.类名类名n例如,如何访问类?例如,如何访问类?System.Text.StringBuilderusingSystem.Text;nConsole.WriteLine(“Hello,World!”);n调试运行调试运行F5,非调试运行非调试运行CtrlF5(忽略断点)(忽略断点)nCTS(CommonTypeSystem)是一个所有)是一个所有.NET语言都支持的语言都支持的数据数据类型类型(或者说中间语言(或者说中间语言(IL)中使用的预定义数据类型)的)中使用的预定义数据类型)的集合集合,确,确保这些语言可以相互传送数据,体现了保这些语言可以相互传送数据,体现了.NET语言的互操作性。语言的互操作性。n值类型值类型直接存储其值,存储在直接存储其值,存储在堆栈堆栈Stack中;而中;而引用类型引用类型存储存储对其值对其值的内存地址的引用的内存地址的引用,存储在运行库托管,存储在运行库托管堆堆heap中。中。n我们必须在设计类型的时候就决定类型实例的行为。这种决定非常重我们必须在设计类型的时候就决定类型实例的行为。这种决定非常重要,用要,用CLRviaC#作者作者JeffreyRichter的话的话来说,来说,“不理解引用不理解引用类型和值类型区别的程序员将会给代码引入诡异的类型和值类型区别的程序员将会给代码引入诡异的bug和性能问题和性能问题(Ibelievethatadeveloperwhomisunderstandsthedifferencebetweenreferencetypesandvaluetypeswillintroducesubtlebugsandperformanceissuesintotheircode.)”。这就要求我。这就要求我们正确理解和使用值类型和引用类型。们正确理解和使用值类型和引用类型。n关于正确理解和使用值类型和引用类型,参见关于正确理解和使用值类型和引用类型,参见C的值类型和引用类型的值类型和引用类型n具体的值类型和引用类型见课本具体的值类型和引用类型见课本P31P38nC数据类型不过是数据类型不过是CTS类型的别名而已。类型的别名而已。n如,如,int只不过是只不过是System.Int32的马甲(别名)的马甲(别名)而已而已n即即inti;可以用可以用System.Int32i;代替代替nFrameworkDesignGuidelines一书中说:我们要一书中说:我们要避免在标志符中使用语言特有的名字(别名)避免在标志符中使用语言特有的名字(别名)来称呼它们。来称呼它们。因为别名没有增加任何价值,反而引起了大量的混淆。因为别名没有增加任何价值,反而引起了大量的混淆。n所以,常用的所以,常用的Convert.ToInt32()而不是而不是ToInt(),Convert.ToInt64()而不是而不是ToLong()。C#的命名规范的命名规范n参见参见http:/ intj=(int)o;/unboxingn拆箱拆箱装箱的逆过程,需显式转换装箱的逆过程,需显式转换n如果应用程序频繁地把值类型变量作为对象处理,最好最初使用引用如果应用程序频繁地把值类型变量作为对象处理,最好最初使用引用类型声明。类型声明。类型转换类型转换n隐式转换隐式转换编译器自动进行编译器自动进行bytebData=20;intiCount=bData;intiCount=20;bytebData=iCount;编译通过编译通过报错,为什么?报错,为什么?n显式转换显式转换上面的错误怎么修改才能编译通过?上面的错误怎么修改才能编译通过?intiCount=20;bytebData=(byte)iCount;但是,显示转换时可能会发生截断或溢出。但是,显示转换时可能会发生截断或溢出。n强制转换强制转换数值字符串数值字符串数值,如,数值,如,”123”123nConvert类:类:将一个基本数据类型转换为另一个基本数据类型将一个基本数据类型转换为另一个基本数据类型stringstr=123;inti=Convert.ToInt32(str);Console.WriteLine(“Int32:0”,i);nParse方法方法:将数字的字符串表示形式转换为它的等效将数字的字符串表示形式转换为它的等效32位有符号整数。一个指示操作是否成功的返回值。位有符号整数。一个指示操作是否成功的返回值。stringstr=123;Int32int32Val;Int32.TryParse(str,outint32Val);Console.WriteLine(Int32:0,int32Val);数值数值数值字符串,如,数值字符串,如,123”123”nConvert.ToString()方法方法n各数值类型的各数值类型的ToString()方法方法nStringtoDateTimestringstr=2008-2-1011:00:00;DateTimedt=newDateTime();dt=DateTime.Parse(str);Console.WriteLine(DateTime:0,dt);nDateTimetoStringdt=System.DateTime.Now;StringMyString;MyString=dt.ToString();Console.WriteLine(DateTime:0,dt);字符串常用操作字符串常用操作n字符串常用操作字符串常用操作Length属性、ToCharArray()方法(打散)、SubString()方法(截取)、IndexOf()(字符匹配)、PadLeft()(填充)、Replace()、Splite()、Format()、Concat()、Join()等nSystem.Text.StringBuilder类:类:4个以上字符串连接时,更高的性能个以上字符串连接时,更高的性能stringreturnNumber=;for(inti=0;i1000;i+)returnNumber=returnNumber+i.ToString();String对象一旦生成不可改变(Immutable).每次使用System.String类中的方法时,都要在内存中创建一个新的字符串对象,而且为该新对象分配新的空间。原来的内存空间等待垃圾回收器回收。StringreturnNumber=;StringBuildersb=newStringBuilder();DateTimestartDateTimeString;DateTimestartDateTimeStringBuilder;TimeSpants;startDateTimeString=DateTime.Now;returnNumber=;for(inti=0;i10000;i+)returnNumber=returnNumber+i.ToString();ts=DateTime.Now.Subtract(startDateTimeString);Console.WriteLine(String:0,ts.Milliseconds);startDateTimeStringBuilder=DateTime.Now;for(inti=0;i10000;i+)sb.Append(i.ToString();returnNumber=sb.ToString();ts=DateTime.Now.Subtract(startDateTimeStringBuilder);Console.WriteLine(StringBuilder:0,ts.Milliseconds);运行结果:String:359StringBuilder:15字符串比较字符串比较(=、EqualsorCompareTo?)nEquals比较两个比较两个对象对象是否相等,即两个对象是否包含是否相等,即两个对象是否包含相同的内容相同的内容也就是比较引用类型是否是对同一个对象的引用也就是比较引用类型是否是对同一个对象的引用equals操作表示的两个变量是否是对同一个对象的引用,即堆中操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。的内容是否相同。n=比较比较基本数据类型基本数据类型,如果两个,如果两个值相同值相同,则结果为,则结果为true比较比较引用引用时,如果引用时,如果引用指向内存中的同一对象指向内存中的同一对象,结果为,结果为true=操作比较的是两个变量的值是否相等,对于引用型变量表示的操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。nCompareTo相等返回相等返回0classTeststaticvoidMain(stringargs)/Createtwoequalbutdistinctstringsstringa=newstring(newcharh,e,l,l,o);stringb=newstring(newcharh,e,l,l,o);Console.WriteLine(a=b);Console.WriteLine(a.Equals(b);/Nowletsseewhathappenswiththesametestsbut/withvariablesoftypeobjectobjectc=a;objectd=b;Console.WriteLine(c=d);Console.WriteLine(c.Equals(d);字符串是一个特殊的引用型类型,在字符串是一个特殊的引用型类型,在C#语言中,重载了语言中,重载了string对象的很对象的很多方法方法多方法方法(包括包括equals()方法方法),使,使string对象用起来就像是值类型一对象用起来就像是值类型一样。样。TrueTrueFalseTrue=、EqualsorCompareTo?n对只关心内容的对只关心内容的引用类型引用类型直接使用直接使用Equals也可以使用也可以使用=,但一定要做转化,比如,但一定要做转化,比如ToString()方法方法n对值类型,使用可读性较好的对值类型,使用可读性较好的集合集合n一定要谨慎选择一定要谨慎选择System.Collections类类当需要当需要大小可按需动态增加大小可按需动态增加,并希望,并希望通过索引来进行通过索引来进行访问访问的数组的时候,使用的数组的时候,使用ArrayList.当需要一个能实现当需要一个能实现后进先出后进先出的集合时,使用的集合时,使用Stack.当需要一个当需要一个先进先出先进先出的集合时,使用的集合时,使用Queue.当需要一个可以当需要一个可以按按Key值来查询值来查询的数组是,使用的数组是,使用Hashtable.当需要一个当需要一个按顺序排列按顺序排列的集合时的集合时,SortedList.C#的控制结构的控制结构nforeach语句,允许迭代语句,允许迭代(iterates)某个集合某个集合(Collection)类型内的所有类型内的所有元素元素stringarrString=Tom,Jack,Mickey;foreach(stringsinarrString)Console.WriteLine(s);intarrList=1,2,3,4;foreach(intiinarrList)Console.WriteLine(i);nfor语句和语句和foreach语句的区别:语句的区别:for的代码块中可以更改迭代元素的值,而的代码块中可以更改迭代元素的值,而foreach不能不能foreach比比for有有更快的执行效率更快的执行效率类类n与与Java类基本相同类基本相同nC类内可包含类内可包含字段(字段(Attribute)、方法和、方法和属性(属性(Property)n属性属性使类能够以一种公开的方法获取和设置值,同时隐藏使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码,如实现或验证代码,如classTimePeriodprivatedoubleseconds;publicdoubleHoursgetreturnseconds/3600;setseconds=value*3600;classProgramstaticvoidMain()TimePeriodt=newTimePeriod();/AssigningtheHoursproperty导致导致set访问器访问器(accessor)被调用被调用.t.Hours=24;/EvaluatingtheHoursproperty导致导致get访问器访问器(accessor)被调用被调用.System.Console.WriteLine(Timeinhours:+t.Hours);n尽量不要公开字段,属性是更好的选择尽量不要公开字段,属性是更好的选择。Property属性n许多类型都定义了可以被检索或者修改的状态信息。通常情况下,这些状态信息作为类型的字段成员实现。例如npublicsealedclassEmployeenpublicStringName;/员工姓名npublicInt32Age;/员工年龄nn用下述形式的代码很容易地获得或者设置对象的状态信息:nEmployeee=newEmployee();ne.Name=JeffreyRichter;/设置员工姓名ne.Age=41;/设置员工年龄nConsole.WriteLine(e.Name);/显示JeffreyRichtern但是,开发人员可以使用下述形式的代码很容易地破坏对象Employee:ne.Age=-5;/怎么会有人是-5岁呢?于是,将前述代码重写为下述形式:publicsealedclassEmployeeprivateStringm_Name;/私有字段privateInt32m_Age;/私有字段publicStringGetName()return(m_Name);publicvoidSetName(Stringvalue)m_Name=value;publicInt32GetAge()return(m_Age);publicvoidSetAge(Int32value)if(value0)thrownewArgumentOutOfRangeException(value,value.ToString(),Thevaluemustbegreaterthanorequalto0);m_Age=value;ne.SetName(JeffreyRichter);/更新员工姓名nStringEmployeeName=e.GetName();/检索员工姓名ne.SetAge(41);/更新员工年龄ne.SetAge(-5);/抛出ArgumentOutOfRangeException异常nInt32EmployeeAge=e.GetAge();/检索员工年龄n我们看到数据密封有两个缺点:首先,因为不得不实现额外的方法,所以必须编写更多的代码;其次,类型的用户必须调用方法,而不能简单地引用一个单独的字段名。n就个人而言,我认为这些缺点微不足道。尽管如此,编程语言和CLR还是提供了一种称为属性的机制减轻了第一个缺点的影响并完全消除了第二个缺点的影响。publicsealedclassEmployeeprivateString_Name;/添加_避免命名冲突privateInt32_Age;/添加_避免命名冲突publicStringNamegetreturn(_Name);set_Name=value;/关键字value通常表示新设的值publicInt32Agegetreturn(_Age);setif(value0)/关键字value通常表示新设的值thrownewArgumentOutOfRangeException(value,value.ToString(),Thevaluemustbegreaterthanorequalto0);_Age=value;n于是,我们可以ne.Name=JeffreyRichter;/“设置”员工姓名nStringEmployeeName=e.Name;/“获取”员工姓名ne.Age=41;/“设置”员工年龄ne.Age=-5;/抛出ArgumentOutOfRangeException异常nInt32EmployeeAge=e.Age;/“获取”员工年龄n编译器编译这个类型时,编译器会发现其中定义的Name和Age两个属性。因为这两个属性都有get和set访问器方法,所以编译器将在Employee类型中生成4个get、set方法定义,就像第22页ppt所示C#接口接口-whatisinterfacenAninterfacelookslikeaclass,buthasnoimplementation.nTheonlythingitcontainsaredefinitionsofevents,indexers,methodsand/orproperties.nThereasoninterfacesonlyprovidedefinitionsisbecausetheyareinheritedbyclassesandstructs,whichmustprovideanimplementationforeachinterfacememberdefined.C#接口接口n一个类实现了某个接口,就相当于声明其一个类实现了某个接口,就相当于声明其能够完成某项工作能够完成某项工作。比如一个。比如一个类实现了类实现了IComparable接口,就相当于声明了它可以完成对自身实例进接口,就相当于声明了它可以完成对自身实例进行比较的工作。行比较的工作。n举个例子举个例子:某公司有一台特殊打印机某公司有一台特殊打印机,还可以使用一年还可以使用一年,一年后可能换为另一年后可能换为另一种打印机一种打印机,这两种打印机都特殊而贵这两种打印机都特殊而贵.所以现在的程序希望换了打印机所以现在的程序希望换了打印机后也少量修改就可用后也少量修改就可用.方法方法:1,定义一个打印机接口定义一个打印机接口.2,定义打印机类定义打印机类A,B,分别实现此接口分别实现此接口.3,定义一个工厂类定义一个工厂类,在类中可选择返回由在类中可选择返回由A实现的接口实现的接口,或者由或者由B实现的接实现的接口口.4,在程序中使用打印机时在程序中使用打印机时,就可以使用工厂类来调用打印机就可以使用工厂类来调用打印机,而不需要知而不需要知道具体的是什么打印机道具体的是什么打印机.如果打印机换了如果打印机换了,只需要修改工厂类就行只需要修改工厂类就行了了.如果有一千个地方都调用过如果有一千个地方都调用过打印机打印机,就不需要一个一个修改就不需要一个一个修改.修改一个地方就行了修改一个地方就行了.接口充当一个隔离接口充当一个隔离层的作用层的作用.interfaceIPrintboolPrintData(stringdata);classCanonPrint:IPrintpublicvirtualboolPrintData(stringdata)/具体业务逻辑具体业务逻辑Console.WriteLine(data);returntrue;classHPPrint:IPrintpublicvirtualboolPrintData(stringdata)/具体业务逻辑略具体业务逻辑略Console.WriteLine(data);returntrue;classPrintFactorypublicIPrintCreatePrint()/返回一个由打机类返回一个由打机类A,或或B实现的接口实现的接口,比如比如returnnewHPPrint();staticvoidMain()PrintFactorymyFactory=newPrintFactory();IPrintmyPrint=myFactory.CreatePrint();myPrint.PrintData(接口的使用接口的使用);C#的多继承的多继承nC+的多继承会导致程序结构的混乱,在的多继承会导致程序结构的混乱,在C#中以接口技术代替了多继中以接口技术代替了多继承,代码也更清晰承,代码也更清晰nC#类可实现一个或多个接口,但至多只能继承一个类(类可实现一个或多个接口,但至多只能继承一个类(单继承,多接单继承,多接口口)usingSystem;interfaceICloneableobjectClone();interfaceIComparableintCompareTo(objectother);classListEntry:ICloneable,IComparableobjectICloneable.Clone()intIComparable.CompareTo(objectother)反射反射n可以使用反射动态创建类型的实例可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。象获取类型并调用其方法或访问其字段和属性。/UsingGetTypetoobtaintypeinformation:inti=42;System.Typetype=i.GetType();System.Console.WriteLine(type);/UsingReflectiontogetinformationfromanAssembly:System.Reflection.Assemblyo=System.Reflection.Assembly.Load(mscorlib.dll);System.Console.WriteLine(o.GetName();n用户名:用户名:sukunstun密码:密码:lm

    注意事项

    本文(dotnet02C#程序设计基础.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开