• C#程序设计从入门到实战-微课版(从入门到实战·微课视频)9787302489061
  • C#程序设计从入门到实战-微课版(从入门到实战·微课视频)9787302489061
  • C#程序设计从入门到实战-微课版(从入门到实战·微课视频)9787302489061
21年品牌 40万+商家 超1.5亿件商品

C#程序设计从入门到实战-微课版(从入门到实战·微课视频)9787302489061

全新正版 极速发货

41.82 6.0折 69.8 全新

库存4件

广东广州
认证卖家担保交易快速发货售后保障

作者王斌

出版社清华大学出版社

ISBN9787302489061

出版时间2018-02

装帧其他

开本16开

定价69.8元

货号1201666876

上书时间2024-06-21

谢岳书店

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
目录
第1章  C#与Visual Studo 2015
  1.1 认识C++
  1.2 .NET Framework
  1.3 安装与卸载Visual Studio 2015
    1.3.1 安装的必备条件
    1.3.2 安装与卸载的步骤
  1.4 熟悉VisualStudio2015的开发环境
    1.4.1 VisualStudio2015中常用的菜单
    1.4.2 第一个C#程序
  1.5 本章小结
  1.6 本章习题
第2章  C#的基本语法
  2.1 基本数据类型
    2.1.1 整型
    2.1.2 浮点型
    2.1.3 字符型和字符串类型
    2.1.4 布尔类型
  2.2 运算符
    2.2.1 算术运算符
    2.2.2 逻辑运算符
    2.2.3 比较运算符
    2.2.4 位运算符
    2.2.5 三元运算符
    2.2.6 赋值运算符
    2.2.7 运算符的优先级
  2.3 变量和常量
    2.3.1 命名规则
    2.3.2 声明变量
    2.3.3 声明常量
  2.4 条件语句
    2.4.1 使用if语句
    2.4.2 使用switch语句
  2.5 循环语句
    2.5.1 使用for循环
    2.5.2 使用while循环
    2.5.3 使用do…while循环
    2.5.4 跳转语句
  2.6 本章小结
  2.7 本章习题
第3章  类和方法
  3.1 了解面向对象
  3.2 类与类的成员
    3.2.1 类的定义
    3.2.2 字段
    3.2.3 定义方法
    3.2.4 定义属性
    3.2.5 访问类的成员
  3.3 深入学习方法
    3.3.1 构造方法
    3.3.2 析构方法

内容摘要
 C#语言是由微软研发的一款简单、高效的编程语言,它不仅能开发Windows窗体应用程序,也能开发网站应用程序,还能使用Unity3D来开发游戏程序。
王斌、秦婧、刘存勇编著的《C#程序设计从入门到实战(微课版)》是关于C#语言的入门和实用教程,是带领读者认识并掌握C#的读物。
本书以VisualStudio2015作为开发工具,共13章,分别介绍了C#的基本语法、字符串与数组、面向对象的基本知识、集合与泛型、事件和委托的使用、创建和使用Windows应用程序、使用ADO.NET连接并访问SQLServer数据库,并在最后综合使用前面所学的知识开发了音乐播放器、ATM交易管理系统、进销
存管理信息系统。
本书使用代码结合插图的方式进行辅助讲解,使读者能够更加直观地理解和掌握C#的各个知识点,并且每个知识点都配有视频讲解(扫描二维码)。
本书可以作为高等学校各专业的计算机程序设计课程教材,同时也可以作为C#语言初学者的自学参考书。

精彩内容
继承和多态
  继承(Inheritance)和多态(Polymorphism)是面向对象语言中的两个重要特征。在C#语言中仅支持单重继承,主要用于解决代码的重用问题。为了将继承关系灵活运地用到程序设计中,在C#语言中提供了接口来解决多重继承的关系。多态主要是通过类的继承或接口的实现方式来体现的。
  本章的主要知识点如下:   掌握继承关系   掌握虚方法的使用   掌握方法的重置   掌握base关键字的使用   掌握接口的定义和实现   掌握多态的应用5.1继承  在编程中灵活地使用类之间的继承关系能很好地实现类中成员的重用,有利于类的使用。在C#语言中所有类都是从Object类继承而来的,Object类中的属性和方法可以被用到任何类。本节将介绍继承的作用以及继承的应用。
5.1.1Object类  Object类是所有类的基类,也称为所有类的根。在Object类中提供了4个常用的方法,即Equals、GetHashCode、GetType以及ToString方法。既然任何一个类都继承了Object类,这4个方法也可以被任何类使用或重写。
  Equals方法  该方法主要用于比较两个对象是否相等,如果相等则返回True,否则返回False。如果是引用类型的对象,则用于判断两个对象是否引用了同一个对象。在C#语言中,Equals方法提供了两个,一个是静态的,一个是非静态的,具体的定义如下。
  
Equals(objecto1,objecto2);//静态方法Equals(objecto);//非静态方法  
  下面通过实例演示Equals方法的使用。
  5-1使用Equals方法判断两个对象是否引用了Student对象。
  根据题目要求,首先创建Student类,由于并不需要使用该类的成员,在类中不必写任何代码,创建Student类的代码如下。
  
classStudent{};  
  创建两个Student类的对象,并使用Equals方法比较类的对象,代码如下。
  
classProgram{staticvoidMain(string[]args){Studentstu1=newStudent();Studentstu2=newStudent();boolflag=Equals(stu1,stu2);Console.WriteLine(\"stu1和stu2比较的结果为,{0}\",flag);}}  
  执行上面的代码,效果如图5-1所示。
图5-1Equals方法的使用  从上面的执行效果可以看出,stu1和stu2引用的并不是同一个对象。如果将代码更改为:  
Studentstu2=stu1;  
这样使用Equals方法判断的结果才为True。如果使用Equals(objecto)方法比较stu1和stu2的值,代码如下。
  
stu1.Equals(stu2);  
  GetHashCode方法  该方法返回当前System.Object的哈希代码,每个对象的哈希值都是固定的。该方法不含有任何参数,并且不是静态方法,因此需要使用实例来调用该方法。由于该方法是在Object类中定义的,因此任何对象都可以直接调用该方法。下面通过实例来演示该方法的使用。
  5-2创建两个Student类的对象,并分别计算其哈希值。
  根据题目要求,代码如下。
  
classProgram{staticvoidMain(string[]args){Studentstu1=newStudent();Studentstu2=newStudent();Console.WriteLine(stu1.GetHashCode());Console.WriteLine(stu2.GetHashCode());}}  
  执行上面的代码,效果如图5-2所示。
图5-2GetHashCode方法的使用  从上面的执行效果可以看出,不同实例的哈希值是不同的,因此也可以通过该方法比较对象是否相等。
  GetType方法  GetType方法用于获取当前实例的类型,返回值为System.Type类型。该方法不含任何参数,是非静态方法。其调用与GetHashCode()方法类似,使用任何对象都能直接调用该方法。下面通过实例来演示该方法的使用。
  5-3创建字符串类型的变量、整数类型的变量以及Student类的对象,并分别使用GetType方法获取其类型并输出。
  根据题目要求,代码如下。
  
classProgram{staticvoidMain(string[]args){inti=100;stringstr=\"abc\";Studentstu=newStudent();Console.WriteLine(i.GetType());Console.WriteLine(str.GetType());Consoline(\"C\");}}classProgram{staticvoidMain(string[]args){Aa1=newB();a1.Print();Aa2=newC();a2.Print();}}  
  执行上面的代码,效果如图5-11所示。
图5-11重写方法和方法隐藏的区别  从上面的执行效果可以看出,使用方法隐藏的方法调用的结果是父类A中Print方法中的内容,而使用方法重写的方法调用的结果是子类C中Print方法中的内容,因此方法隐藏相当于在子类中定义新方法,而方法重写则是重新定义父类中方法的内容。从上面的代码也可以看出,在“Aa1=newB()”语句中A类是父类、B类是子类,相当于将子类转换成父类,即隐式转换。如果需要将父类转换成子类,则需要强制转换,并且在强制转换前需要先将所需的子类转换成父类,示例代码如下。
  
Aa2=newC();Cc=(C)a2;c.Print();  
  在上面的实例中,a2是父类对象,然后将其强制转换成C类对象。Object类中的ToString方法能被类重写,并返回所需的字符串,通常将其用到类中返回类中属性的值。在Student类中添加重写的ToString方法,代码如下。
  
classStudent{publicstringMajor{get;set;}publicstringGrade{get;set;}publicvoidPrint(){Console.WriteLine(\"专业:\"+Major);Console.WriteLine(\"年级:\"+Grade);}publicoverridestringToString(){returnMajor+\",\"+Grade;}}  
  这样,在调用Student类中的ToString方法时即可获取专业和年级的值。此外,除了ToString方法,在类中也可以重写Equals方法、GetHashCode方法。
5.1.5abstract关键字  abstract关键字代表的是抽象的,使用该关键字能修饰类和方法,修饰的方法被称为抽象方法、修饰的类被称为抽象类。
  抽象方法是一种不带方法体的方法,仅包含方法的定义,语法形式如下。
  
访问修饰符abstract方法返回值类型方法名(参数列表);  其中,当abstract用于修饰方法时,也可以将abstract放到访问修饰符的前面。抽象方法定义后面的;符号是必须保留的。需要注意的是,抽象方法必须定义在抽象类中。
  在定义抽象类时,若使用abstract修饰类,将其放到class关键字的前面,语法形式如下。
  
访问修饰符abstractclass类名{//类成员}  
  其中,abstract关键字也可以放到访问修饰符的前面。在抽象类中可以定义抽象方法,也可以定义非抽象方法。通常抽象类会被其他类继承,并重写其中的抽象方法或者虚方法。此外,尽管在抽象类中仍然能定义构造器,但抽象类不能实例化,即不能使用如下语句。
  
new抽象类的名称();  
  5-8创建抽象类ExamResult,并在类中定义数学(Math)、英语(English)成绩的属性,定义抽象方法计算总成绩。分别定义数学专业和英语专业的学生类继承抽象类ExamResult,重写计算总成绩的方法并根据科目分数的不同权重计算总成绩。其中,数学专业的数学分数占60%、英语分数占40%;英语专业的数学分数占40%、英语分数占60%。
  根据题目要求,代码如下。
  
abstractclassExamResult{//学号publicintId{get;set;}//数学成绩publicdoubleMath{get;set;}//英语成绩publicdoubleEnglish{get;set;}//计算总成绩publicabstractvoidTotal();}classMathMajor:ExamResult{publicoverridevoidTotal(){doubletotal=Math*0.6+English*0.4;Console.WriteLine(\"学号为\"+Id+\"数学专业学生的成绩为:\"+total);}}classEnglishMajor:ExamResult{publicoverridevoidTotal(){doubletotal=Math*0.4+English*0.6;Console.WriteLine(\"学号为\"+Id+\"英语专业学生的成绩为:\"+total);}}  
  在Main方法中分别创建MathMajor和EnglishMajor类的对象,并调用其中的Total方法,代码如下。
  
classProgram{staticvoidMain(string[]args){MathMajormathMajor=newMathMajor();mathMajor.Id=1;mathMajor.English=80;mathMajor.Math=90;mathMajor.Total();EnglishMajorenglishMajor=newEnglishMajor();englishMajor.Id=2;englishMajor.English=80;englishMajor.Math=90;englishMajor.Total();}}  
  执行上面的语句,代码如图5-12所示。e.WriteLine(stu.GetType());}}  
  执行上面的代码,效果如图5-3所示。
图5-3GetType方法的使用  从上面的执行效果可以看出,每一个变量都通过GetType方法获取了其类型,通常可以使用该方法比较某些对象是否为同一类型的。
  ToString方法  ToString方法返回一个对象实例的字符串,在默认情况下将返回类类型的限定名。任何类都可以重写ToString方法,返回自定义的字符串。对于其他的值类型,则为将值转换为字符串类型的值。关于ToString方法的重写将在5.1.4节中介绍。
5.1.2使用类图表示继承关系  假设要完成一个学校的校园管理信息系统,在员工管理系统中有不同的人员信息,包括学生信息、教师信息等。学生信息、教师信息会有一些公共的信息,例如人员编号、姓名、性别、身份证号、联系方式都是共有的。
  直接为学生信息、教师信息创建两个类,并在两个类中分别定义属性和方法,在学生类中定义编号(Id)、姓名(Name)、性别(Sex)、身份证号(Cardid)、联系方式(Tel)、专业(Major)、年级(Grade)7个属性,并定义一个方法在控制台输出这些属性的值。学生信息类(Student)的代码如下。
  
publicclassStudent{publicintId{get;set;}publicstringName{get;set;}publicstringSex{get;set;}publicstringCardid{get;set;}publicstringTel{get;set;}publicstringMajor{get;set;}publicstringGrade{get;set;}publicvoidPrint(){Console.WriteLine(\"编号:\"+Id);Console.WriteLine(\"姓名:\"+Name);Console.WriteLine(\"性别:\"+Sex);Console.WriteLine(\"身份证号:\"+Cardid);Console.WriteLine(\"联系方式:\"+Tel);Console.WriteLine(\"专业:\"+Major);Console.WriteLine(\"年级:\"+Grade);}}  
  用同样的方法创建教师信息类(Teacher),属性包括编号(Id)、姓名(Name)、性别(Sex)、身份证号(Cardid)、联系方式(Tel)、职称(Title)、工资号(Wageno),并将上述属性输出到控制台。教师信息类(Teacher)的代码如下。
  
classTeacher{publicintId{get;set;}publicstringName{get;set;}publicstringSex{get;set;}publicstringCardid{get;set;}publicstringTel{get;set;}publicstringTitle{get;set;}publicstringWageNo{get;set;}publicvoidPrint(){Console.WriteLine(\"编号:\"+Id);Console.WriteLine(\"姓名:\"+Name);Console.WriteLine(\"性别:\"+Sex);Console.WriteLine(\"身份证号:\"+Cardid);Console.WriteLine(\"联系方式:\"+Tel);Console.WriteLine(\"职称:\"+Title);Console.WriteLine(\"工资号:\"+WageNo);}}  
  读者从Student类和Teacher类的代码中会发现很多重复的代码,如果再创建管理人员信息类或者其他的人员信息类,还会出现很多重复的代码,这样会造成大量的代码冗余。
  在VisualStudio2015中提供了类图功能,可以将类直接转换成类图的形式,在开发软件时,经常会在详细设计阶段使用类图的形式来表示类。在VisualStudio2015中将类文件转换成类图非常简单,直接右击Student.cs文件,在右键菜单中选择“查看类图”命令,效果如图5-4所示。
  在图5-4所示的类图中可以清晰地看到在Student.cs文件中定义的属性和方法。同样,Teacher类对应的类图如图5-5所示。
图5-4Student类对应的类图图5-5Teacher类对应的类图  从Student和Teacher类的类图中可以看到它们有很多重复的属性,如果将这些属性单独写到一个文件中,Student和Teacher类在使用这些属性和方法时直接复制这个文件中的内容就方便多了。
  在C#语言中提供的继承特性就是解决上述问题的,将Student和Teacher类中共有的属性抽取出来定义为一个类,然后Student和Teacher类都继承这个共有属性类即可。假设将共有属性类定义为Person,在类中定义属性和方法的代码如下。
  
classPerson{publicintId{get;set;}publicstringName{get;set;}publicstringSex{get;set;}publicstringCardid{get;set;}publicstringTel{get;set;}publicvoidPrint(){Console.WriteLine(\"编号:\"+Id);Console.WriteLine(\"姓名:\"+Name);Console.WriteLine(\"性别:\"+Sex);Console.WriteLine(\"身份证号:\"+Cardid);Console.WriteLine(\"联系方式:\"+Tel);}}  
  创建后的Person类对应的类图如图5-6所示。
图5-6Person类的类图  如果已经创建了Person类,则Student和Teacher类中仅保留不同的属性和方法即可。将Student类的代码更改为如下代码。
  
classStudent{publicstringMajor{get;set;}publicstringGrade{get;set;}publicvoidPrint(){Console.WriteLine(\"专业:\"+Major);Console.WriteLine(\"年级:\"+Grade);}}  
  将Teacher类的代码更改为如下代码。
  
classTeacher{publicstringTitle{get;set;}publicstringWageNo{get;set;}publicvoidPrint(){Console.WriteLine(\"职称:\"+Title);Console.WriteLine(\"工资号:\"+WageNo);}}  
  Person、Student、Teacher类的类图如图5-7所示。
图5-7去除冗余代码后的类图  现在需要借助类的继承功能分别完成Student类和Teacher类继承Person类的操作。在C#语言中实现继承非常容易,只需要用:符号即可完成类之间继承的表示。
  类之间的继承关系的定义语法形式如下。
  
访问修饰符classClassA:ClassB{//类成员}  
  其中:*访问修饰符:包括public、internal。
*ClassA:称为子类、派生类,在子类中能直接使用ClassB中的成员。
*ClassB:称为父类、基类。
  
  注意:一个类只能有一个父类,但是一个父类可以有多个子类,并且在C#语言中继承关系具有传递性,即A类继承B类、C类继承A类,则C类也相当于继承了B类。
  
  Student类继承Person类的代码如下。
  
classStudent:Person{publicstringMajor{get;set;}publicstringGrade{get;set;}publicvoidPrint(){Console.WriteLine(\"专业:\"+Major);Console.WriteLine(\"年级:\"+Grade);}}  
  同样,将Teacher类继承Person类,生成的类图如图5-8所示。
图5-8继承关系的类图表示  在类图中使用箭头表示继承关系,箭头的三星形端指向父类,另一端是子类。关于子类和父类继承后的特性和使用将在后面的小节中详细介绍。
5.1.3方法隐藏——new关键字  从图5-8所示的继承关系的类图中可以看出,在每个类中都有Print方法,即子类和父类中有同名的方法,那么这种方式是方法的重载吗?答案是否定的,方法重载是指方法名相同而方法的参数不同的方法。图5-8在子类中定义的同名方法相当于在子类中重新定义了一个方法,在子类中的对象是调用不到父类中的同名方法的,调用的是子类中的方法,因此也经常说成是将父类中的同名方法隐藏了。在C#

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP