C#程序的设计基本知识点汇总_第1页
C#程序的设计基本知识点汇总_第2页
C#程序的设计基本知识点汇总_第3页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、绪论:2一、向对象的理解2一、对象的概念2二、在编程中的理解2二、C#中的类基本知识点总结 3三C#面向对象编程的程序结构解析:5四、类和对象的关系6五、C#基本知识点补充9六、流程控制知识点概括和注意事项 13七、事件和委托以及索引指示器 14一、Delegate 概念介绍11二、实现 delegate 的步骤: 11三、实例说明12八、事件应用一一为按钮添加事件 21九、接口基本知识21十、学习C#面向对象程序设计的体会 24十一、在以后的学习中解决对策: 24绪论:通过前几个学期对java编程语言的学习,加上这学期对C#开发语言的了解, 发现java和c#之间有很多想通之处,所以对C#也

2、能很快的上手,实现简单的编 程。实现简单的代码开发和维护。一下是自己几周课的学习内容总结和自己学 习这门课的心得体会。一、向对象的理解一、对象的概念:客观存在的世界中的一切事物都是对象。面向对象。二、在编程中的理解(1) 面向对象就是把现实世界中事物实例模型化,把现实中的事例用一组属性 和方法及表示他的事件来表示,并且用面向对象的编程语言转化正计算机可执 行的工作,并模拟现实的操作来实现实际的应用。(2) 面向对象在编程中还实现数据和操作的分离,不同方法和事件分离,以及 把具有相同属性和方法的对象集合起来达到内聚。这就利于程序的可读性,可 维护性好,也方便程序移植,可复用高了,就减轻了程序的而

3、开发难度,从而 提高了程序设计的效率。客观世界属性操作达到目的现实事物实例模型化、C#中的类基本知识点总结1. C#中的类只支持单继承。2. 对类成员的访问:1 .公有成员。Public,允许外部访问。2.私有成员。Private, 只允许类中的成员访问。派生类都不能访问。3.保护成员。Protected.方便派生 类的直接访问,同时又希望对外部是隐藏的。4.内部成员。Internal.对于同一包 内的程序或库是透明的。而对于包外是隐藏的。5. 类中的成员要么是静态要么是非静态。一般来说,静态成员是属于类所有, 非静态成员则属于类的实例一对象。访问的时候:静态:类名.成员名;非静态: 实例名.

4、成员名(this.成员名)static6. 关键字const用于声明常量,后跟数据类型的声明。例:public constdouble x=1.0;7. 构造函数不声明返回类型,构造函数用于执行类的实例的初始化。8. 折构函数在类的实例超出实用范围时,我们希望收回它所占的存储时使用。 析构函数跟类名相同,只是在前面加上一个符号:9. 值参数:使用值参数时,初调用的方法不会修改内存中实参的值引用型参数:引用型参数并不开辟新的内存区域。当利用引用型参数向方法传递形参时,编译程序将把实际参数所在内存中的地址传递给方法。10. substring(O,i)从此实例检索子字符串。子字符串从指定的字符位置

5、开始且具 有指定的长度。String.indexof(char) 报告指定Unicode字符在此字符串中的 第一个匹配项的索引.11. 输出型参数:输出型参数也不开辟新内存,跟引用型参数一样,只是引用型参数在使用的时候不用需要对变量进行初始化,引用型参数用于传递方法的返回数据。12. 如果形参中包含了数组参数,那么它必须在参数表中位于最后。另外,参数 只允许一维数组。13. 静态方法可以访问类中的静态成员,但不能访问非静态成员。但可以将类的 实例当作参数传递给方法使用,指明具体的调用对象,这时就可以操作实例的 静态和非静态成员了 。14. 类的方法的重载:方法的名字相同,但参数个数或类型不同,

6、编译器 就能 知道在什么时候调用什么方法。15. C#中,操作符重载总是在类中声明,并且通过调用类的成员方法来实现。 操作符重载可以适用于类的实例的操作。16. 静态域的声明用static修饰符。无论建立多少个该类的实例,内存中只存在 一个静态数据拷贝。域相当于简单成员变量。在另一个类对静态域的访问可以 通过对静态域所在类的public方法进行访问。17. 简单地说:const型表达式的值在编译时形成,而只读域static readonly表 达式的值在程序运行时才形成。这种方法有利于版本的控制。18. 对于静态域,类在装载时对其进行初始化;对于非静态域,在类的实例创建时进行初始化19. 虽然

7、域和属性语法类似,但不能把属性当作变量那样使用。也不能把属性当 作引用型参数或输出型参数进行传递。在属性的访问声明中,对属性的值的访 问用get关键字标出。对属性的值的写操作用set标出。20. 不直接操作类的数据内容,而是通过访问器进行访问,它借助get和set对属 性值进行读写。三C#面向对象编程的程序结构解析:实例说明:usi ng System;/ 命名空间n amespace _spaceclass Programstatic void Main(string args) /程序主函数,也是入口student a=new student(); /实例化一个对象 aa.n ame=&q

8、uot;xiaoli"public class student /定义一个 student 类public stri ng n ame;public int n ame get return n ame; /属性private stri ng ID;public student(int id , string name) / 给 student 定义一个方法public class grender : student / student类的 重载四、类和对象的关系从概念上来讲:具有相同数据结构和相同操作的对象的集合例如:public class peoplepeoplel 类的 na

9、me 字段public float n ame;/ public stri ng brithday;private stri ng brithday set return brithday; /brithday 字段的只写的属性。达到保护别人生日隐私功能public void age(stri ng i,stri ng brithday)/ 计算年龄的方法/age = this.data() - brithday;人,是一个大类,人都有姓名和生日这一组属性,可以通过age这个反法来计 算每个人的年龄,这就是类。概念:对象就是现实生活中的一个个的实体,类是人们对现实生活动现实存在 的对像不断认识

10、而产生的抽象。C#类的概念本质上是现实生活中类的概念相同 的。接下来我们看在C#当中如何定义一个类,比如我们搞个DNF游戏当中的角色 类。Codeclass 角色private int 血值;public int 血量值get return 血值;set 血值=value ;public void 攻击()Console.WriteLine("攻击");我们定义了角色类之后,再看一下如何把C#类实例化为对象:class Programstatic void Main( stri ng args)/把角色类实例化一个 战士”的对象,并为战士的血量值属性赋值,使用战士的 攻击方

11、法。角色战士 = new角色();战士.血量值=1000;战士 .攻击();/同样,我们还可以用角色类实例化不同的对象如法师”角色法师=new角色();法师.血量值=400;法师.攻击();从以上内容我们可以看到,C#类其实就是定义了一个模板,在模板里刻画好我 们需要的属性与行为,然后再用模板印刷出一张张的纸,每张纸都是一个对象, 是独立存在的。在C#中我们把 模板印刷为纸张”的过程称为实例化。以上例子 通过类一一角色实例化一个对象一一战士。并且把属性血量复值,从而调用攻 击的方法。五、C#基本知识点补充1、C#具有所有面向对象的语言的所有特性:封装,继承,多态。在C#系统中, 所有的类型都可

12、以看作一个对象。C#只允许单继承,即一个类不会有多个基类, C#不会有全局函数,不会有全局变量,不会有全局常数,所有的一切只能圭寸装 在一个类中。2、.net包括四个部分:vos类型系统;元数据;公用语言规范;虚拟执行系统。3、using system表示导入名称空间。4让我们从第一个程序开始就记得:每个东西都必须属于一个类,类里面的方 法总是为我们完成某件工作的。在C#中,程序的执行总是从main()方法开始的, 一个程序中不允许出现两个或两个以上的5.main()方法。对于习惯学C控制台程序的读者,必须要牢记:main()方法必须包含在一个类中。6. 利用string可以方便地对字符串进行

13、连接或剪切。例:strings= ”ood ” + ”morning ”char x=s3字符串可以通过下标进行索引,得到一个字符。7. 我们可以用/进行单行标注,/*/进行多行标注。在C和C+中,任何非0值都表示真,在C#中,任何非0值都不能代替true. 在其它类型的整型值和布尔值之间不存在任何的转换,将整型转换成布尔型是 不合法的。8. 把一系列相关的变量组织成单一实体的过程称为生成结构的过程。这个单一实体的类型叫结构类型,每一个变量就是结构的成员9. 结构类型包含的成员类型可以相同,也可以不同。我们甚至可以把一个结构 类型当作另一个结构成员的类型。10. 枚举实际上是为一组在逻辑上密不

14、可分的整数值提供便于记忆的符号。结构类型变量的值由各个成员的值组合而成。而枚举则不同,枚举类型的变量在某 一时刻只能取枚举中某个元素的值。按照系统的设定,每个元素的类型都为整 型。且第一个元素的值为0,后面的每个元素梯加1,也可以直接赋值。如把前面 第一个元素的值设为1,后面的元素不用设,系统自动将后面元素的值递加1.11. C#中另一大数据类型是引有类型。其含义是该类型的变量不直接存储所包含 的值,而是指向它所要存储的值。也就是说引用类型存储实际数据引用值的地 址。12. 类是面向对象编程的基本单位,是一种包含数据成员,函数成员和嵌套类型 的数据结构。类和结构都包含了自己的成员,但它们的区别

15、是:类是引用类型, 而结构是值类型。13. 如果我们对某个类定义了一个变量,则我们就将它称为类的一个实例。14. 我们常用到的类:object类。这个类是其它所有类的基类,其它类型可以直 接或间接地从object类中继承。因此,对一个object类的变量可以赋于任何类 型的值。15. 代表?在声明代表时,只需要指定代表指向的原型的类型,它不能有返回值,也不能带有输出类型的参数。女口: delegate int Mydelegate().在使用的时候: Mydelegate d=new Mydelegate(p.instanceMethod).为什么不用 delegate d=new Mydel

16、egate(p.instanceMethod)呢? 原因是 delegate 相当于 class 需要一个名字,class myclass这个class的名字是 myclass而且它包含有其它元素、 常数或者函数,变量等。跟char a=a不同,它不包含有其它的元素,a就是一个 变量。 而 myclass 不是变量, 它只一个名字。 而 myclass a=new myclass(); a 才 是变量,是类的一个实例。在这里,这个delegate的名字是Mydelegate ,也并 不是一个变量。16. 变量从用户角度来说,是存储信息的基本单元,从系统角度来说,变量就是 计算机内存中的一个储存

17、空间。17. 静态方法不能用类的实例来访问,必须用类名来访问。18. 数组的声明:数组的类型数组的元素个数数组的名字;数组个数可以通过数组名加圆点加Length获得。如arr.Length表示arr数组的个数19. 在进行批量处理数据的时候,我们要用到数组.数组是一组类型相同的有序数据20. 数组的初始化:int a1= new int1,2,3;为什么是 new int,而不是 new a1 呢: 因为int是类型,a1是int类型的一个实例.而且a1所代表的是1,2,3,并不是函 数.与delegate int Myclass();不同,Myclass()虽然是一个名字,但它可以代表一个

18、函数,不是常数.原则:类型后面的名字如果可以代表函数,则这个名字就是一种类型.如果类型后面的名字代表常数,则这个名字不是一种类型,只是类型的一个变 量.或者可以用另一种说法:如果名字后面含有(),则在赋值或设定实例的时候 new后面要用该名字作为类型.21. 变量名不能与C#中的关键字名称相同;变量名不能与C#中库函数名称相 同。22. 静态变量:static int a; 一旦静态变量所属的类被加载,直到包含该类的程序 运行结束前它将一直存在。23. 稳性数据转换实际上就是从低精度的数据转换成高精度的的数据类型。如: ushort 转换成 int.24. 隐式枚举转换允许把十进制数0转换成任

19、何枚举类型,对其它整数则不存在 这种隐式转换。25. 从元素类型为TS的数组类型S到元素类型为Tt的数组类型T转换,如果元 素类型为值类型,则不能进行隐式转换。26. 有一个元素类型为int的枚举类型E,则当执行从E到byte的显示枚举类型 转换时,实际上作的是从int到byte的显示数字转换;当执行从byte到E的显 式枚举转换时,实际上是执行byte到int的隐式数字转换。女口: Weekday day;day=(Weekday) 3;实际上是E到byte的显示枚举类型转换。如何使用枚举:enum Colorred=0, yellow, blue,gree n,purple;Color c

20、olor_arr = new Color();Color_arr=(Color) 2;Console.WriteLine( Color_arr0 ”,Color_arr);.则其输出结果为blue.27. 赋值操作符(=)和条件操作符(?:)按照右结合的原则,即操作从右到 左的顺序执行。丫=(x>10? 0:1).28. 枚举类型的加法:Weekday day仁Weekday.Sunday; Weekday day2=Weekday.Saturday;Weekday day3=day1+6;枚举型加法实际上枚29. 位运算符就是对数按二进制位进行运算的操作符。位运算中的异或运算,当 两个

21、位相同时,异或运算结果为0,不相同时异或运算为1移位运算,左称位将 操作数向左位移,高位被抛弃,低位顺序补0右移运算时,如果X为非负数, 最高位设为0;如果X为负数,最高位设为1,即最大为一1.30. 自增自减操作符:自增自减操作符有前缀和后缀之分。对于前缀操作符,遵 行的原则是先增减,后使用”,后缀则相反,先使用,后增减”。31. new操作符:new操作符用于创建一个新的类型实例。它有三种形式:1,对 象创建表达式。2,数组创建表达式。3代表创建表达式。32. typeof操作符用于获得系统原型对象的类型。六、流程控制知识点概括和注意事项1. C#提供的选择语句有if和switch语句。2

22、. 如果if或else语句包含的嵌套语句只包含一条执行语句,则嵌套部分的大括号 可以省略。3. 每一条else与离它最近且没有其它else与之配对的if相搭配。4.if语句仅允许布尔数据类型的结果。例:if(args.length=0)是正确的。而 if(args.length)是不正确的。args.length 返回一个整形数(integer )。5. switch语句是只能有一个default标签。6. C#中它要求每个case标签项后使用break语句或中转语句goto,即不允许从一 个case自动遍历到其它case.如果想遍历其它语句,则可以加入下面两条跳转语 句:goto case

23、lable:跳至标签语句执行。Goto default:跳至default标签执行。7. 数组的初始化:int a 1=new int1,2,3,4,58. 在事先知道循环次数的条件下,用for循环是比较方便的。9. while语句中允许使用break语句来结束循环。也可以使用continue语句来停 止内嵌语句的执行,继续进行while循环。10. 可以使用break和continue语句来控制循环的表达。女口:要求打印除7以外 的0到9的语句,只需要在到打印7的时候,跳出打印语句就可以了。For(int i=0;i<9;i+) if i=7 con ti nu e;con sole.

24、write(i);11. foreach(Myi nt x in Prime)12. 预编译和条件编译都是以#开头的。可以帮助我们在程序执行过程中发出编译的错误或警告。13. 溢出的处理用checked来检测。14. 预处理指令如果出现在其它输入输出元素中间就不会被执行。中writeLine或Readline等中间。七、事件和委托以及索引指示器事件所声明的类型必须是一个代表类型(delegate),代表类型应预先声明。在编写类的时候,我们可以编写事件向客户说明发生了什么事情 。事件可以在 类的属性或域中加以说明,但事件的类型必须是代表型的。我们可以预订事件 确保事件初触发或撤消触发。索引指示器

25、为我们象使用数组那样为类或类的实例添加路径列表,通过下标进行访问类中的信息。事件的声明格式:例:public eve nt eve ntha ndler click;这个省略了事件访问声明。public eve nt eve ntha ndler click。这个没有省略事件访问声明。大多数情况下不用事件访问声明索弓丨指示器:IPaddress m_arrayips;public void IPaddress thisintnindex getreturn m_arrayipsint nindex; this代表实例,我们象使用数组那样为类或类的实例添加路径列表实例i实际上代表的是类中的属性或

26、域的信息 列表。实例i.在C#中,事件的实现依赖于delegate,因此我们有必要先了解一下delegate 的概念。一、 Delegate概念介绍delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的 类。delegate既可以引用静态函数,又可以引用非静态成员函数。delegate是 面向对象、类型安全。run time能够保证delegate指向一个有效的方法,你无 须担心delegate会指向无效地址或者越界地址。二、实现delegate 的步骤:实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate :1. 声明一个delegate对象

27、,它应当与你想要传递的方法具有相同的参数和返 回值类型。2. 创建delegate对象,并将你想要传递的函数作为参数传入。3. 在要实现异步调用的地方,通过上一步创建的对象来调用方法。三、实例说明下面是一个简单的例子:using System;public class MyDelegateTest/步骤1,声明delegate对象public delegate void MyDelegate(stri ng n ame);/这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型public static void MyDelegateF un c(stri ng n ame)

28、Console.WriteLine("Hello, 0", name);public static void Mai n()/步骤2,创建delegate对象MyDelegate md = newMyDelegate(MyDelegateTest.MyDelegateFu nc);/步骤3,调用delegatemd("sam1111");输出结果是:Hello, sam1111参考C#中的委托:有许多人问的,.Net中的委托以及事件处理。我拿简单的例子说明一下,是现 实中的例子:比如说一个公司(场景),你是老板,手下有两个员工,小张和小王。你命令小王,如

29、果小张玩游戏,则小王扣去小张500元钱。这就是现实中的委托 实际上,在写程序中,程序员就是老板,小张和小王就是两个对象。小张玩游 戏是一个方法,小张还有一个游戏事件,他玩游戏激发这个事件。而小王就是 事件处理对象,他负责把小张的钱扣除500。所以,委托有如下几个要素:1 激发事件的对象-就是小张2 处理对象事件的对象-就是小王3 定义委托,就是你让小王监视小张。如果这三个要素都满足的话,则你就写出了一个完整事件的处理。using System;using System.Collectio ns.Ge neric;using System丄inq;using System.Text;n ames

30、pace TestCsharp/ 定义委托处理程序/public delegate void PlayGameHa ndler(object sen der, System.Eve ntArgse);public class 场景STAThreadpublic static void Main( stri ng args)Console.WriteLine("场景开始了 .");/生成小王小王w = new 小王();/生成小账小张z = new 小张();/指定监视z.PlayGame += new 小张.PlayGameHandler(w.扣钱);/ 委托实例 化后绑定

31、到事件,注意我们用的是+=而不是=;这是因为委托是特殊的对象, 它可以引用多个对象(在这里是指它可以引用多个函数)。/开始玩游戏乙玩游戏();Console.WriteLine("场景结束.");Con sole.ReadLi ne();/ 负责扣钱的人public class 小王public 小王()Console.WriteLine("生成小王.");public void 扣钱(object sen der, Eve ntArgs e)Console.WriteLine(”小王:好小子,上课时间胆敢玩游戏.");Console.Writ

32、eLine("小王:看看你小子有多少钱.");小张 f =(小张)sender;Console.WriteLine("小张的钱:"+ f.钱.ToString();Console.WriteLine("开始扣钱");System.Threadi ng.Thread.Sleep(500);f.钱=f.钱-500;Console.WriteLine("扣完了 现在小张还剩下:"+ f.钱.ToString();/如果玩游戏,则引发事件public class 小张/ 定义委托处理程序public delegate vo

33、id PlayGameHa ndler(object sen der,System.Eve ntArgs e);/先定义一个事件,这个事件表示小张”在玩游戏。public eve nt PlayGameHa ndler PlayGame;/ 保存小张钱的变量private int m_Mon ey;public 小张()Console.WriteLine("生成小张.");m_Money = 1000;/构造函数,初始化小张的钱。public int钱 /此属性可以操作小张的钱。getreturn m_Mon ey;setm_Money = value;public voi

34、d 玩游戏()Console.WriteLine("小张开始玩游戏了 .");Console.WriteLine("小张:CS好玩,哈哈哈!我玩.");System.Threadi ng.Thread.Sleep(500);/System.Eve ntArgs e = new Eve ntArgs();/On PlayGame(e);PlayGame(this, new EventArgs();protected virtual void On PlayGame(Eve ntArgs e) if (PlayGame != n ull)PlayGame(t

35、his, e);八、事件应用一一为按钮添加事件注册事件可以双击直接进入事件;给事件添加要处理的代码(行为或者动作)private void butt on 1_Click(object sen der, Eve ntArgs e)/这就是为控件Butt on添加Click事件Applicatio n .Exit();/ 退出程序九、接口基本知识1.每个组件都是独立的,有其独特的功能,只能通过接口与外界通讯,当一个 组件需要提供新的服务时,可以通过新的接口来实现。2组件应该具有与编程语言无关的特性。组件模型是一种规范,不管采用哪种语言设计组件,都必须遵守这一规范。3在接口的声明体中,可以定义接口

36、的成员,接口的成员可以是方法,属性, 索引指示器和事件。4. 接口继承和类继承不同,接口继承只是说明继承。C#中类继承只能是单继承 但接口可以是多继承。被继承的接口应该是访问得到的,不能从private或 internal类型的接口中继承。5对一个接口的继承也就继承了这个接口的所有成员。6接口成员不能是常量,域,操作符,构造函数或析构函数,而且不能包括所 有的静态成员。7接口成员默认的访问方式是public,接口成员声明不能包含任何修饰符。与 不能力卩 abstract,public,protected8如果底层成员的命名与高级成员的命名一样,那么底层成员将覆盖同名高级成员。但由于接口的多继承性,如果两个父成员具有两个相同名的成员,这就 产生了两义性,这时需要显示声明,明确指出需要调用哪个父接口成员。9我们只需要记住一点:一旦成员被覆盖以后,所有对其的访问都被覆盖后的 成员拦截”。10. 接口定义不包括方法的实现部分,接口可以通过类和结构来实现。用类来实现接口的时候,接口名称必须包含在类声明的基类列表中。女口: class A:isequence,itest,如果类实现了接口,那么类也隐式地继承了该接口的所有父 接口,不管这些父接口有没有在类的声明的基类列表中出现。11. 一个类可以实现多个接口 。如果类中每个成员都明显地指出了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论