2022年C#教程—最佳的入门教程 .pdf
《2022年C#教程—最佳的入门教程 .pdf》由会员分享,可在线阅读,更多相关《2022年C#教程—最佳的入门教程 .pdf(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C#语言 第一部分面向对象(一)类和 Main 方法using System; namespace Edu.Study.OO.MainMethod classProgram static void Main(string args) Console.WriteLine( Hello World ); C#语言第一部分面向对象(二)类类是面向对象的基础,类表现出的最基本特性是其“ 封装性 ” 。类是某一些具有相同属性和行为对象的抽象。例如:波斯猫、野猫、家猫、花猫都具有相同的属性和行为,所以被抽象成为猫类。类具有属性和方法,表示这个类所代表的对象具有的特性和行为。从类实例化对象后,对象就可以给类
2、中定义的属性“ 赋值 ” 或运行类中定义的方法,属性和方法和每个对象相关,即相同类的不同的对象具有相同的属性,但属性的属性值可以不同;具有相同的方法,但方法运行的结果可以不同。类需要将和其相关的属性和方法“ 封装 ” 起来,并和对象进行绑定。看下面的例子,自行理解:using System; namespace Edi.Study.OO.Class public class Person private string name; private int age; private bool sex; /* 属性定义,在面向对象编程里,字段作为保存属性值的变量,而属性则需要使用特殊的行来表现。一般
3、来说一对 get/set行为用来展现对象的属性,其中get用于 2 获取该对象的属性;set用于设置该对象的属性get/set 称为属性的访问器 */姓名属性public string Name get / get访问器必须返回一个值,作为该属性的“属性值returnthis.name; /. 运算符的作用是访问某个对象的属性或方法/this关键字表示“当前实例”,即哪一个对象正在操作属性访问器,this就表示哪个对象/所以一般说法, this表示“当前对象”,使用this.访问的是“声明在本类中”的属性和方法 set名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
4、 - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 25 页 - - - - - - - - - / set访问器具有一个局部变量value,该值是从外部设置给该属性的值this.name = value; / 属性的基本要求: get访问器必须返回一个值,该值类型和属性类型相同;set访问器可以设置一个值,这个值保存在什么地方倒无所谓 / 年龄属性public int Age get return age; set age = value; / 性别属性public bool Sex get return sex; set sex = value;
5、 / 显示个人信的方法public void ShowMe() / 使用 this.Name,此时属性 Name的get访问器会运行,返回 Name属性的属性值,其它属性同理Console.WriteLine( 姓名:0 ,性别: 1 ,年龄: 2 岁。, this.Name, this.Sex, this.Age); /* 字段、属性和方法前面,都可以使用public, protected, private和internal这四种访问修饰符来修饰;public表示字段、属性或方法为 “公开”,公开的成员不仅可以被类中的其它成员访问到,也可以通过这个类的对象访问到;private表示字段、属性
6、或方法为“私有”, 私有的成员只能被类中的其它成员访问到,无法通过类的对象访问到; protected和internal稍候介绍; */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 25 页 - - - - - - - - - classProgram staticvoid Main(string args) / 通过 new运算符可以实例化一个对象/ 实例化 Person类的对象,保存在 person变量中Person p1 = new Person(); Pers
7、on p2 = new Person(); / 设置 person对象的各个属性,使用 person.Name = 王宝宝 ,Name属性的 set访问器会被运行,等号右边的值王宝宝 传递给 set访问器的 value变量p1.Name = 王宝宝 ; p1.Age = 21; p1.Sex = false; p2.Name = 李大大 ; p2.Age = 18; p2.Sex = true; / 使用 ” .” 操作符访问 person对象的 ShowMe方法,显示结果p1.ShowMe(); p2.ShowMe(); C#语言 第一部分面向对象(三)对象的构造上一章我们介绍了一个Pers
8、on 类,它可以正常工作,但从逻辑上存在很多问题。首先我们注意到,Person 类对象实例化完毕后,我们才去确定其属性,如Name,Sex,Age 属性。但客观情况下,这些属性应该是同对象生成一起赋值的。一句话,当对象被实例化的同时,对象的属性就应当有初始值,反映到代码中,就是“ 用来保存属性值的字段应该有初始值” 构造器,也成为构造方法,构造函数,就是专门用来做这件事情的。一个类可以有0 或多个构造器,在有多个构造器的情况里,各个构造器的参数必须不同。在C#类中,有这样一类特殊的方法,没有返回值类型,方法名必须和类名相同,可以有参数列表。这类方法就叫做构造器,构造器通过new 操作符指定,在
9、实例化对象的同时运行。我们用构造器来改造上一章讲到的Person类。using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Edu.Study.OO.Constructor / 人类,这次我们修改一下Person类/ 在Person 类生成对象的同时, Name属性,Sex属性和 Age属性的值就应该确定,而不应该在生成对象后再进行设置,这是不符合客观规律的。/ 在对象实例化的同时对属性进行设置,就要用到构造器public class Person priva
10、te string name; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 25 页 - - - - - - - - - private int age; private bool sex; / 人类,这次我们修改一下Person类/ 在Person 类生成对象的同时, Name属性,Sex属性和 Age属性的值就应该确定,而不应该在生成对象后再进行设置,这是不符合客观规律的。/ 在对象实例化的同时对属性进行设置,就要用到“构造器”public Person() th
11、is.name = 小王; this.age = 22; this.sex = true; / 带有参数的构造器public Person(string name, int age, bool sex) this.Name = name; this.Age = age; this.sex = sex;/ 这里, Sex属性 /带有部分参数的构造器public Person(int age, bool sex) this.Name = 小?王a ?; this.Age = age; this.sex = sex;/ 这里, Sex属性 /带有部分参数的构造器public Person(bool
12、sex) this.Name = 小?王a ?; this.Age = 22; this.sex = sex;/ 这里, Sex属性 public string Name get / get访问器必须返回一个值,作为该属性的“属性值returnthis.name; set 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 25 页 - - - - - - - - - / set访问器具有一个局部变量value,该值是从外部设置给该属性的值this.name = value;
13、 public int Age get return age; set age = value; / 性别属性,这次我们去掉了Sex的set访问器。/ 由于通过构造器已经设置了Sex属性,所以无需通过 set访问器来设置该属性/ 按照一般情况, Sex属性在对象实例化后,不应该设置该属性。/ 属性可以只具有 set访问器或 get访问器,即“只读”或“只写”的属性public bool Sex get return sex; / 显示个人信息的方法public void ShowMe() Console.WriteLine( 姓名: 0 ,性别: 1 ,年龄: 2 岁。, this.Name,
14、 this.Sex, this.Age); classProgram staticvoid Main(string args) /删除掉 public Person()构造器,查看程序编译情况/删除掉所有的构造器,查看程序编译情况Person person = new Person (); person.ShowMe(); / person.Sex = true;/ 只读属性禁止了给属性设置值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 25 页 - - - - - -
15、 - - - person = new Person (false); person.ShowMe(); person = new Person (18, true); person.ShowMe(); person = new Person (小丽, 23, false); person.ShowMe(); 我们给 Person 类增加了若干个“ 构造器 ” ,并修改 Sex 属性为只读,从而让Person 类更更符合客观实际。对于任何一个类,可以不人为提供构造器,此时编译器会赋予类一个“ 默认构造器 ” ,即没有参数的构造器。这个构造器什么也不做,仅仅是为了new 操作符能够得以指定一个构
16、造器。而我们一旦定义了有参数的构造器,编译器便会这样认为“ 这个类的对象必须提供参数才能够实例化” ,便不再会提供无参数的默认构造器了。所以一个类如果同时需要有默认构造器和有参数的构造器,则默认构造器必须手动提供,不要指望编译器会自动生成。现在我们可以完整定义new 操作符的语法规范:类名变量名= new 类构造器名 (构造器实参数列表); C#语言 第一部分面向对象(四)字段默认值C#中,可以给类字段以一个默认值,这样一方面可以简化构造器的代码,另一方面较为直观,是一种推荐的方式。这一章比较简单,可结合上一章深入理解构造器的作用。看代码:using System; using System.
17、Collections.Generic; using System.Linq; using System.Text; namespace Edu.Study.OO.DefaultValue / 还是那个人类。/ 通过构造器public classPerson /保存名字的字段,默认值为小王private string name = 小王 ; /保存年龄的字段,默认值为0 private int age = 22; /保存性别的字段, true为男性, false为女性,默认值为女性private bool sex = false; /默认构造器,由于字段定义了默认值,所以构造器中无需给字段赋值
18、public Person() /带有参数的构造器,这里的构造器给所有字段都赋了值,所以无视默认值public Person(string name, int age, bool sex) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 25 页 - - - - - - - - - this.Name = name; this.Age = age; this.sex = sex; / 带有部分参数的构造器,这里只给sex和age字段赋值,而 name 字段本身就有默认值p
19、ublic Person(int age, bool sex) this.Age = age; this.sex = sex; / 这里, Sex属性 / 带有部分参数的构造器,这里只给sex字段赋值,其它字段都有默认值public Person(bool sex) this.sex = sex; public string Name get / get访问器必须返回一个值,作为该属性的“属性值returnthis.name; set / set访问器具有一个局部变量value,该值是从外部设置给该属性的值this.name = value; public int Age get return
20、 age; set age = value; public bool Sex get名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 25 页 - - - - - - - - - return sex; /显示个人信息的方法public void ShowMe() Console.WriteLine( 姓名: 0 ,性别: 1 ,年龄: 2 岁o。, this.Name, this.Sex, this.Age); classProgram staticvoid Main(s
21、tring args) / 删除掉 public Person()构造器,查看程序编译情况/ 删除掉所有的构造器,查看程序编译情况Person person = new Person (); person.ShowMe(); / person.Sex = true;/ 只读属性禁止了给属性设置值person = new Person (false); person.ShowMe(); person = new Person (18, true); person.ShowMe(); person = new Person (小?丽 ?, 23, false); person.ShowMe();
22、在声明字段的同时,可以用赋值运算符(=)在字段后面直接加上一个值(例如第17 行) ,但这和给变量赋值是两个概念。以赋值运算符跟随在字段之后的值称为字段的“ 默认值 ” 。这只是一种形式,并不是写在这里就在这里发生赋值,真正发生赋值的时机还是在构造器中,只不过无论我们通过哪个构造器创建类的对象实例,这个构造器中,没有显式赋值的字段,都会由编译器增加一句赋值代码,将该字段赋值为设定的默认值。其实,无论我们是否给字段增加了默认值,字段都具备默认值的,只不过如果我们没有人为增加默认值,字段的默认值将是0 或 null。C#语言 第一部分面向对象(五)继承在现实生活中,类和类之间可能会有一种这样的关系
23、:一个类是另一个类的扩展,反过来讲,后一个类是前一个类的基础。例如:动物类是猫类的基础,猫类是动物类的扩展。这种关系称为继承,即猫类继承了动物类。被继承的类称为父类(C+说法) ,基类( C#说法)或超类(Java说法),另一个类叫做子类。怎么叫无所谓,关键名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 25 页 - - - - - - - - - 看效果。所谓扩展,就是子类拥有超类的一切特征(包括属性和方法),而子类还可以在超类的基础上添加自身的属性和方法。例如:猫类拥
24、有动物类的一切属性和行为,但猫类还具有自身的属性(例如长胡子,喵喵叫)和行为(例如磨爪子,抓耗子) 。子类虽然拥有超类的一切特征,但并不是说子类可以任意的去访问继承下来的这些超类特征,子类只能访问到超类中访问修饰符为public 或 proctected 的那部分属性和方法,其余的属性和方法无法直接访问。C#的这种继承成为无条件继承,即子类必须继承超类的所有特性,无法选择。看代码:using System; namespace Edu.Study.OO.Inherit public class Person /保存名字的字段/访问修饰符 protected表示被修饰的成员不仅可以被当前类访问,
25、还可以被该类的所有子类访问,但不能通过对象被其它类访问。protectedstring name; protectedint age; protectedbool sex; /带有参数的构造器public Person(string name, int age, bool sex) this.Name = name; this.Age = age; this.sex = sex; public string Name get returnthis.name; set this.name = value; public int Age get return age; 名师资料总结 - - -精品
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C#教程最佳的入门教程 2022 C# 教程 最佳 入门教程
限制150内