




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简介C# 是一种具有 C+ 特性,Java 样式及 BASIC 快速建模特性的编程语言。编程结构C# 是大小写敏感的。半角分号(;)是语句分隔符。C# 中所有内容都打包在类中,而所有的类又打包在命名空间中(正如文件存与文件夹中)。和 C+ 一样,有一个主函数作为你程序的入口点。C+ 的主函数名为 main,而 C# 中是大写 M 打头的 Main。类块或结构定义之后没有必要再加一个半角分号。C+ 中是这样,但 C# 不要求。命名空间每个类都打包于一个命名空间。可以用点(.)定界符访问命名空间中的类。Using:比如using System。System 是最基层的命名空间,所有其他命名空间和类都包含于其中。System 命名空间中所有对象的基类是 Object。变量1. C# 中(不同于 C+)的变量,总是需要你在访问它们前先进行初始化,否则你将遇到编译时错误。故而,不可能访问未初始化的变量。2. 你不能在 C# 中访问一个“挂起”指针。3. 超出数组边界的表达式索引值同样不可访问。4. C# 中没有全局变量或全局函数,取而代之的是通过静态函数和静态变量完成的。数据类型所有 C# 的类型都是从 object 类继承的。有两种数据类型:1. 基本/内建类型 2. 用户定义类型C# 内建类型的列表:类型 字节 描述byte 1 unsigned bytesbyte 1 signed byteshort 2 signed shortushort 2 unsigned shortint 4 signed integeruint 4 unsigned integerlong 8 signed longulong 8 unsigned longfloat 4 floating point numberdouble 8 double precision numberdecimal 8 fixed precision numberstring - Unicode stringchar - Unicode charbool true, false boolean用户定义类型文件包含:1. 类 (class)2. 结构(struct)3. 接口(interface)注意:以下类型继承时均分配内存:1. 值类型 2. 参考类型。值类型值类型是在堆栈中分配的数据类型。它们包括了: 除字符串,所有基本和内建类型 结构 枚举类型引用类型引用类型在堆(heap)中分配内存且当其不再使用时,将自动进行垃圾清理。引用类型包括: 类 接口 集合类型如数组 字符串枚举通过关键字 enum 定义。比如:1. enumWeekdays2. 3. Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday4. 类与结构类的对象在堆中分配,并使用 new 关键字创建。而结构是在栈(stack)中进行分配。C# 中的结构属于轻量级快速数据类型。当需要大型数据类型时,你应该创建类。1. structDate2. 3. intday;4. intmonth;5. intyear;6. 7. 8. classDate9. 10. intday;11. intmonth;12. intyear;13. stringweekday;14. stringmonthName;15. publicintGetDay()16. 17. returnday;18. 19. publicintGetMonth()20. 21. returnmonth;22. 23. publicintGetYear()24. 25. returnyear;26. 27. publicvoidSetDay(intDay)28. 29. day=Day;30. 31. publicvoidSetMonth(intMonth)32. 33. month=Month;34. 35. publicvoidSetYear(intYear)36. 37. year=Year;38. 39. publicboolIsLeapYear()40. 41. return(year/4=0);42. 43. publicvoidSetDate(intday,intmonth,intyear)44. 45. 46. .47. 属性C# 提供了一种更加便捷、简单而又直接的属性访问方式。上述代码改成:1. usingSystem;2. classDate3. 4. publicintDay5. get6. returnday;7. 8. set9. day=value;10. 11. 12. intday;13.14. publicintMonth15. get16. returnmonth;17. 18. set19. month=value;20. 21. 22. intmonth;23.24. publicintYear25. get26. returnyear;27. 28. set29. year=value;30. 31. 32. intyear;33.34. publicboolIsLeapYear(intyear)35. 36. returnyear%4=0?true:false;37. 38. publicvoidSetDate(intday,intmonth,intyear)39. 40. this.day=day;41. this.month=month;42. this.year=year;43. 44. 45.1. classUser2. 3. publicstaticvoidMain()4. 5. Datedate=newDate();6. date.Day=27;7. date.Month=6;8. date.Year=2003;9. Console.WriteLine10. (Date:0/1/2,date.Day,date.Month,date.Year);11. 12. 修饰符常用的 public、private 和 protected 修饰符。这里讨论一些 C# 引入的新的修饰符。readonlyreadonly 修饰符仅用于修饰类的数据成员。正如其名字说的,一旦它们已经进行了写操作、直接初始化或在构造函数中对其进行了赋值,readonly 数据成员就只能对其进行读取。readonly 和 const 数据成员不同之处在于 const 要求你在声明时进行直接初始化。看下面的代码:1. classMyClass2. 3. constintconstInt=100;/直接进行4. readonlyintmyInt=5;/直接进行5. readonlyintmyInt2;6. 7. publicMyClass()8. 9. myInt2=8;/间接进行10. 11. publicFunc()12. 13. myInt=7;/非法14. Console.WriteLine(myInt2.ToString();15. 16. sealed带有 sealed 修饰符的类不允许你从它继承任何类。所以如果你不想一个类被继承,你可以对该类使用 sealed 关键字。代码:1. sealedclassCanNotbeTheParent2. 3. inta=5;4. unsafe使用 unsafe 修饰符在 C# 中定义一个不安全上下文。在不安全上下文中,你可以插入不安全代码,如 C+ 的指针等。代码:1. publicunsafeMyFunction(int*pInt,double*pDouble)2. 3. int*pAnotherInt=newint;4. *pAnotherInt=10;5. pInt=pAnotherInt;6. .7. *pDouble=8.9;8. 接口如果你有 COM 的思想,你马上就知道我在说什么了。接口是只包含函数签名而在子类中实现的抽象基类。在 C# 中,你可以用 interface 关键字声明这样的接口类。.NET 就是基于这样的接口的。C# 中你不能对类进行多重继承这在 C+ 中是允许的。通过接口,多重继承的精髓得以实现。即你的子类可以实现多重接口。比如:1. usingSystem;2. interfacemyDrawing3. 4. intoriginx5. 6. get;7. set;8. 9. intoriginy10. 11. get;12. set;13. 14. voidDraw(objectshape);15. 16.17. classShape:myDrawing18. 19. intOriX;20. intOriY;21. 22. publicintoriginx23. 24. get25. returnOriX;26. 27. set28. OriX=value;29. 30. 31. publicintoriginy32. 33. get34. returnOriY;35. 36. set37. OriY=value;38. 39. 40. publicvoidDraw(objectshape)41. 42. ./做要做的事43. 44. 45. /类自身的方法46. publicvoidMoveShape(intnewX,intnewY)47. 48. .49. 50. 51. 数组数组分配于堆中,所以是引用类型的。你不能访问数组边界外的元素。所以 C# 防止你引发那种 bug。同时也提供了迭代数组元素的帮助函数。foreach 是这样的迭代语句之一。特点:(1)方括号在类型后面而不是在变量名后面(2)创建元素使用 new 运算符(3 )C# 支持一维、多维和交错数组(数组的数组)比如:1. intarray=newint10;/int型一维数组2. for(inti=0;iarray.Length;i+)3. array=i;4.5. int,array2=newint5,10;/int型二维数组6. array21,2=5;7.8. int,array3=newint5,10,5;/int型三维数组9. array30,2,4=9;10.11. intarrayOfarray=newint2;/int型交错数组-数组的数组12. arrayOfarray0=newint4;13. arrayOfarray0=newint1,2,15;索引器索引器用于书写一个可以通过使用 像数组一样直接访问集合元素的方法。你所需要的只是指定待访问实例或元素的索引。索引器的语法和类属性语法相同,除了接受作为元素索引的输入参数外。比如:1. 注意:CollectionBase是用于建立集合的库类。List是CollectionBase中用于存放集合列表的受保护成员。2. classShapes:CollectionBase3. 4. publicvoidadd(Shapeshp)5. 6. List.Add(shp);7. 8.9. /indexer10. publicShapethisintindex11. 12. get13. return(Shape)Listindex;14. 15. set16. Listindex=value;17. 18. 19. 20.装箱/拆箱装箱的思想在 C# 中是创新的。正如前面提到的,所有的数据类型,无论是内建的还是用户定义的,都是从 System 命名空间的基类 object 继承的。所以基础的或是原始的类型打包为一个对象称为装箱,相反的处理称为拆箱。例子:1. classTest2. 3. staticvoidMain()4. 5. intmyInt=12;6. objectobj=myInt;/装箱7. intmyInt2=(int)obj;/拆箱8. 9. 例程展示了装箱和拆箱两个过程。一个 int 值可以被转换为对象,并且能够再次转换回 int。当某种值类型的变量需要被转换为一个引用类型时,便会产生一个对象箱保存该值。拆箱则完全相反。当某个对象箱被转换回其原值类型时,该值从箱中拷贝至适当的存储空间。函数参数C# 中的参数有三种类型:1. 按值传递/输入参数2. 按引用传递/输入-输出参数3. 输出参数如果你有 COM 接口的思想,而且还是参数类型的,你会很容易理解 C# 的参数类型。按值传递/输入参数:传递的值复制到了新的地方并传递给函数。例子:1. SetDay(5);2. .3. voidSetDay(intday)4. 5. .6. 按引用传递/输入-输出参数:可以传递一个引用地址,传递一个输入的值并通过函数得到一个输出的值。因此引用参数也被称为输入-输出参数。不能将未初始化的引用参数传递给函数。C# 使用关键字 ref 指定引用参数。同时还必须在传递参数给要求引用参数的函数时使用关键字 ref。例子:1. inta=5;2. FunctionA(refa);/使用ref,否则将引发编译时错误3. Console.WriteLine(a);/打印201. voidFunctionA(refintVal)2. 3. intx=Val;4. Val=x*4;5. 输出参数:出参数是只从函数返回值的参数。输入值不要求。C# 使用关键字 out 表示输出参数。例子:1. intVal;2. GetNodeValue(Val);1. boolGetNodeValue(outintVal)2. 3. Val=value;4. returntrue;5. 参数和数组的数量变化C# 中的数组使用关键字 params 进行传递。一个数组类型的参数必须总是函数最右边的参数。只有一个参数可以是数组类型。你可以传送任意数量的元素作为数组类型的参数。看了下面的例子你可以更好的理解:注意:使用数组是 C# 提供用于可选或可变数量参数的唯一途径。代码:1. voidFunc(paramsintarray)2. 3. Console.WriteLine(numberofelements0,array.Length);4. 1. Func();/打印02. Func(5);/打印13. Func(7,9);/打印24. Func(newint3,8,10);/打印35. intarray=newint81,3,4,5,5,6,7,5;6. Func(array);/打印8运算符与表达式is 运算符:s 运算符是用于检查操作数类型是否相等或可以转换。is 运算符特别适合用于多态的情形。is 运算符使用两个操作数,其结果是布尔值。参考例子:1. voidfunction(objectparam)2. 3. if(paramisClassA)4. /做要做的事5. elseif(paramisMyStruct)6. /做要做的事7. 8. as 运算符as 运算符检查操作数的类型是否可转换或是相等(as 是由 is 运算符完成的),如果是,则处理结果是已转换或已装箱的对象(如果操作数可以装箱为目标类型,参考 装箱/拆箱)。如果对象不是可转换的或可装箱的,返回值为 null。看看下面的例子以更好的理解这个概念。1. Shapeshp=newShape();2. Vehicleveh=shpasVehicle;/返回null,类型不可转换3.4. Circlecir=newCircle();5. Shapeshp=cir;6. Circlecir2=shpasCircle;/将进行转换7.8. objectobjects=newobject2;9. objects0=Aisha;10. object1=newShape();11.12. stringstr;13. for(inti=0;i&objects.Length;i+)14. 15. str=objectsasstring;16. if(str=null)17. Console.WriteLine(cannotbeconverted);18. else19. Console.WriteLine(0,str);20. 21.代码:Output:Aishacan not be converted语句foreach:用于迭代数组等集合。代码:foreach (string s in array) Console.WriteLine(s);lock在线程中使代码块称为重点部分。(译注:lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。)checked/unchecked:用于数字操作中的溢出检查。1. intx=Int32.MaxValue;x+;/溢出检查2. 3. x+;/异常4. 5. unchecked6. 7. x+;/溢出8. Switch:1.现在在执行一条 case 语句后,程序流不能跳至下一 case 语句。之前在 C+ 中这是可以的。1. intvar=100;2. switch(var)3. 4. case100:Console.WriteLine();/这里没有break5. case200:Console.WriteLine();break;6. 2.然而你可以像在 C+ 中一样这么用:1. switch(var)2. 3. case100:4. case200:Console.WriteLine(100or200);break;5. 3.你还可以用常数变量作为 case 值:1. conststringWeekEnd=Sunday;2. conststringWeekDay1=Monday;3. .4. stringWeekDay=Console.ReadLine();5. switch(WeekDay)6. 7. caseWeekEnd:Console.WriteLine(Itsweekend!);break;8. caseWeekDay1:Console.WriteLine(ItsMonday);break;9. 10.委托委托让我们可以把函数引用保存在变量中。这就像在 C+ 中使用 typedef 保存函数指针一样。委托使用关键字 delegate 声明。看看这个例子,你就能理解什么是委托:1. delegateintOperation(intval1,intval2);2. publicintAdd(intval1,intval2)3. 4. returnval1+val2;5. 6. publicintSubtract(intval1,intval2)7. 8. returnval1-val2;9. 10.11. publicvoidPerform()12. 13. OperationOper;14. Console.WriteLine(Enter+or-);15. stringoptor=Console.ReadLine();16. Console.WriteLine(Enter2operands);17. 18. stringopnd1=Console.ReadLine();19. stringopnd2=Console.ReadLine();20. 21. intval1=Convert.ToInt32(opnd1);22. intval2=Convert.ToInt32(opnd2);23. 24. if(optor=+)25. Oper=newOperation(Add);26. else27. Oper=newOperation(Subtract);28. 29. Console.WriteLine(Result=0,Oper(val1,val2);30. 31.继承与多态:C# 只允许单一继承。多重继承可以通过接口达到。代码:class Parentclass Child : Parent虚函数:虚函数在 C# 中同样是用于实现多态的概念的,除了你要使用 override 关键字在子类中实现虚函数外。父类使用同样的 virtual 关键字。每个重写虚函数的类都使用 override 关键字。1. classShape2. 3. publicvirtualvoidDraw()4. 5. Console.WriteLine(Shape.Draw);6. 7. 8.9. classRectangle:Shape10.11. 12. publicoverridevoidDraw()13. 14. Console.WriteLine(Rectangle.Draw);15. 16. 17.18. classSquare:Rectangle19. 20. publicoverridevoidDraw()21. 22. Console.WriteLine(Square.Draw);23. 24. 25. classMainClass26. 27. staticvoidMain(stringargs)28. 29. Shapeshp=newShape3;30. Rectanglerect=newRectangle();31. 32. shp0=newShape();33. shp1=rect;34. shp2=newSquare();35. 36. shp0.Draw();37. shp1.Draw();38. shp2.Draw();39. 40. 41. Output:42. Shape.Draw43. Rectangle.Draw44. Square.Draw45.使用“new”隐藏父类函数:可以隐藏基类中的函数而在子类中定义其新版本。关键字 new 用于声明新的版本。思考下面的例子,该例是上一例子的修改版本。注意输出,我用 关键字 new 替换了 Rectangle 类中的关键字 override。1. classShape2. 3. publicvirtualvoidDraw()4. 5. Console.WriteLine(Shape.Draw);6. 7. 8.9. classRectangle:Shape10. 11. publicnewvoidDraw()12. 13. Console.WriteLine(Rectangle.Draw);14. 15. 16. classSquare:Rectangle17. 18. /这里不用override19. publicnewvoidDraw()20. 21. Console.WriteLine(Sq
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师招聘之《幼儿教师招聘》考前冲刺测试卷包含答案详解【培优a卷】
- 智能锁控系统创新创业项目商业计划书
- 演出经纪人之《演出经纪实务》练习题附答案详解(培优)
- 2025年教师招聘之《小学教师招聘》练习题包含完整答案详解【全优】
- 2025年教师招聘之《小学教师招聘》题库必刷100题附参考答案详解【a卷】
- 教师招聘之《小学教师招聘》过关检测试卷及答案详解【名校卷】
- 2025年教师招聘之《幼儿教师招聘》通关练习题和答案含答案详解【预热题】
- 2025年四川小金县考核招聘10名事业单位高层次人才的笔试备考题库附答案详解
- 2025年教师招聘之《幼儿教师招聘》练习题库含答案详解【突破训练】
- 押题宝典教师招聘之《幼儿教师招聘》模考模拟试题含答案详解【综合卷】
- 2025年自建房施工合同书 (包工不包料 C款)
- (高清版)DB33∕T 715-2018 公路泡沫沥青冷再生路面设计与施工技术规范
- 军事心理战试题及答案
- 托育园管理制度
- 2025年江西省高职单招文化统一考试真题及答案(网络版)
- 铁塔拆除施工方案
- DB3714-T 0010-2022 园林绿化养护管理规范
- 儿童用药安全科普知识
- 光伏发电设备检修维护(技师)职业技能鉴定备考试题库(含答案)
- 沥青路面基础知识
- 支气管镜和CT定位
评论
0/150
提交评论