第一章面向对象高级编程_第1页
第一章面向对象高级编程_第2页
第一章面向对象高级编程_第3页
第一章面向对象高级编程_第4页
第一章面向对象高级编程_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

1、.net课程系列C#高级编程.NET方向 第二学期课程第一章 面向对象高级编程Newture新程教育本章目录本章目录面向对象介绍面向对象介绍面向对象介绍面向对象介绍开始游戏黑子先走绘制画面判断输赢轮到白子绘制画面判断输赢输出最后结果回到步骤二进行下一局面向对象介绍 这两方的行为是一模一样的黑白双方 负责绘制画面棋盘系统 负责判定诸如犯规、输赢等规则系统面向对象介绍面向对象介绍面向对象介绍面向对象介绍面向对象介绍面向对象介绍面向对象介绍面向对象介绍面向对象介绍面向对象介绍面向对象介绍面向对象介绍封装封装封装封装访问修饰符说明public公有访问。不受任何限制private私有访问。只限于本类成员

2、访问,子类、实例均不能访问protected保护访问。只限于本类和子类访问,实例不能访问。internal内部访问。只限于本项目内访问,其他不能访问。protected internal内部保护访问。只限于本项目或是子类访问,其他不能访问封装多态之重载多态之重载使用可选参数和命名参数使用可选参数和命名参数使用可选参数和命名参数使用可选参数和命名参数使用可选参数和命名参数使用可选参数和命名参数使用可选参数和命名参数多态之重载继承继承继承继承继承继承class Animal private string name; private int age; private int no; public A

3、nimal() Console.WriteLine(父类构造器); class Dog : Animal public Dog() : base() /显式的调用父类无参的构造函数,可以省略 Console.WriteLine(子类构造器); class Animal private string name; private int age; private int no; public Animal(string name) Console.WriteLine(父类构造器); class Dog : Animal public Dog(string name): base(name) /父类

4、构造函数被重载,且没有提供默认无参的构造函数 /所以必须显式的调用父类的构造函数,并带参数 Console.WriteLine(子类构造器); 继承 class Animal public Animal() Console.WriteLine(父类构造器); Animal() Console.WriteLine(父类析构器); class Dog : Animal public Dog() Console.WriteLine(子类构造器); Dog() Console.WriteLine(子类析构器); 继承 class Person public void Action() Console.

5、WriteLine(动作); class Student : Person public void Study() Console.WriteLine(学习); static void Main(string args) Student stu = new Student(); Person p = stu; p.Action(); p.Study(); /非法,Study不属于Person类 继承 sealed class Person class Student : Person /错误,密封类不能被继承 继承继承class Person public void Eat() Console

6、.WriteLine(father); class Teacher:Person public new void Eat() /父类同名方法被隐藏,通过new关键字消除警告信息 Console.WriteLine(son); static void Main(string args) Person p = new Person(); p.Eat(); Teacher t = new Teacher(); t.Eat(); Person pp = new Teacher(); pp.Eat(); 思考:上述代码的输出是什么?继承 class Bird public virtual void Fl

7、y() /虚方法 Console.WriteLine(我在天空自由的飞翔); class Ostrich:Bird public override void Fly() /重写父类的方法 Console.WriteLine(我只能在地上奔跑); static void Main(string args) Ostrich os = new Ostrich(); os.Fly(); 思考:上述代码的输出是什么?继承继承 class CustomerAccount public virtual decimal CalculatePrice() return 0.9M; class GoldAccou

8、nt : CustomerAccount public override decimal CalculatePrice() return base.CalculatePrice()*0.9M; /重写后,调用父类版本 继承 class Bird public virtual void Fly() Console.WriteLine(我在天空自由的飞翔); class Ostrich:Bird public sealed override void Fly() /表面如果Ostrich还有子类,则子类不能再重写该方法 Console.WriteLine(我只能在地上奔跑); 继承扩展方法面向对象

9、之多态面向对象之抽象面向对象之抽象 class Triangle : Shape private double a, b, c; public Triangle() public Triangle(double a,double b,double c) this.a = a; this.b = b; this.c = c; public override double CalPerimeter() /通过override 修饰方法来实现父类抽象方法 return a + b + c; class Circle : Shape private double radius; public Circ

10、le() public Circle(double radius) this.radius = radius; public override double CalPerimeter() /通过override修饰方法来实现父类抽象方法 return 2 * Math.PI * radius; 面向对象之抽象面向对象之抽象面向对象之接口面向对象之接口 public interface IBankAccount /定义一个接口 void PayIn(decimal amount); bool WithDraw(decimal amount); decimal Balance get; 面向对象之

11、接口面向对象之接口面向对象之接口面向对象之接口面向对象之值类型与引用类型面向对象之值类型与引用类型面向对象之值类型与引用类型面向对象之值类型与引用类型比较类型值类型引用类型内存存储方式栈中堆中效率效率高,不需要地址转换效率低,需要地址转换回收方式使用完立即回收使用完不立即回收,等待垃圾回收器回收赋值方式复制,创建一个复制的新对象只是引用原对象默认值0null面向对象之is与as操作符 class Person class Student : Person static void Main(string args) Student stu = new Student(); if (stu is

12、Person) /判断stu对象是否是Person类型 Console.WriteLine(YES); else Console.WriteLine(NO); static void Main(string args) object obj = null; string str = obj as string; /将一个对象转换成一种类型 if (str != null) Console.WriteLine(“转换成功”+obj); else Console.WriteLine(obj不可转换为字符串); 面向对象之结构struct Time private int hours,minutes

13、,seconds; public int Seconds get return seconds; set seconds = value; public int Minutes get return minutes; set minutes = value; public int Hours get return hours; set hours = value; public Time(int hours, int minutes, int seconds) this.hours = hours; this.minutes = minutes; this.seconds = seconds;

14、 static void Main(string args) Time t = new Time(12,45,34); Console.WriteLine(t.Hours); Console.WriteLine(t.Minutes); Console.WriteLine(t.Seconds); 面向对象之结构比较类型结构类是值类型还是引用类型值类型引用类型存储方式栈中堆中是否可以显式声明默认构造器不可以可以若已显示声明构造器,是否还会生成默认构造器会不会声明实例字段的同时,能否能初始化不能能如果在自己的构造器中不初始化一个字段,编译器会帮助初始化吗?不会会面向对象之枚举面向对象之枚举面向对象之命名空间 作为一个好习惯,应该在命名空间中定义自己所有的类。VS2012 默认使用项目名称作为顶级命名空间。.NET Framework类型(FCL)也遵循这个规定;.NET Framework中的每个类都存在一个命

温馨提示

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

评论

0/150

提交评论