C#程序设计 第3章C#面向对象编程
C# 程序设计 第3章 C#面向对象编程
C#程序设计 第3章C#面向对象编程
C# 程序设计 第3章 C#面向对象编程
本节目标 ■理解面向对象的基本概念 ■理解类和对象的区别和联系 ■掌握方法的重载、不同的方法参数 ■掌握构造函数的声明及使用 ■了解静态构造函数的声明和使用 ■掌握类的继承 ■掌握this和base的用法 3
3 本节目标 ▪ 理解面向对象的基本概念 ▪ 理解类和对象的区别和联系 ▪ 掌握方法的重载、不同的方法参数 ▪ 掌握构造函数的声明及使用 ▪ 了解静态构造函数的声明和使用 ▪ 掌握类的继承 ▪ 掌握this和base的用法
基本内容 方法的重载 构造函数 类的继承 小结
4 基本内容 构造函数 小结 方法的重载 类的继承
为什么要重载 问题 public int Sum(int para1,int para2) 整形参数, 返回值整型 return para1 para2; 如果想让两个string型、两个double型相加,怎么做? 编写两个不同名字的方法,这样我们在进行调用时 要先判断是什么类型,能否不判断直接就能相加呢? 5
5 为什么要重载 public int Sum(int para1, int para2) { return para1 + para2; } 整形参数, 返回值整型 如果想让两个string型、两个double型相加,怎么做? 编写两个不同名字的方法,这样我们在进行调用时 要先判断是什么类型,能否不判断直接就能相加呢?
方法的重载 ■同一个类中添加几个名字相同,但参数类型或个数不同的方法 public string Sum(string para1,string para2) return para1 para2; public double Sum(double para1,double para2) return para1 para2; 调用时只要传递参数即可,无需判断类型 演示示例:方法的重载 6
6 方法的重载 ▪ 同一个类中添加几个名字相同,但参数类型或个数不同的方法 public string Sum (string para1, string para2) { return para1 + para2; } public double Sum (double para1, double para2) { return para1 + para2; } 调用时只要传递参数即可,无需判断类型 演示示例:方法的重载
方法的重载 方法的重载依赖干方法签名 public void SampleMethod(double x,int y) Console.WriteLine("SampleMethod(double i):[0}",x); } public void SampleMethod(int y,double x) Console.WriteLine("SampleMethod(int i):{0}",y); public void SampleMethod(ref int i) Console.WriteLine("SampleMethod(ref int i):0}",i); f/public void SampleMethod(out int i){}/编译错误 2024/10/9 7
7 2024/10/9 7 方法的重载 方法的重载依赖于方法签名。 签名的定义如下:方法名+参数个数+参数类型+顺序 ⚫参数数目不同 ⚫参数数目相同,类型不同。 ⚫参数数目相同,类型相同,先后顺序不一样 相同 返回值类型不能区别重载 一个方法采用ref或out参数,另一个不采用,可以重载
静态方法和实例方法 static修饰的方法称为静态方法,是一个类的全局方法 静态方法也叫作类方法,类名.方法名 ■没有static修饰的方法叫实例方法,对象名.方法名 ■注意事项: static方法中不能直接使用非静态成员,因为非静态成员与 实例相关 ■static方法中不能使用this(与实例相关) ■非static方法中可以使用静态成员 8
8 静态方法和实例方法 ▪ static修饰的方法称为静态方法,是一个类的全局方法 ▪ 静态方法也叫作类方法,类名.方法名 ▪ 没有static修饰的方法叫实例方法,对象名.方法名 ▪ 注意事项: ◼ static方法中不能直接使用非静态成员,因为非静态成员与 实例相关 ◼ static方法中不能使用this(与实例相关) ◼ 非static方法中可以使用静态成员
class SimpleMath private int nValue =10; private static int staticValue =20; public static void staticDisplay() Console.WriteLine("静态方法调用"); ∥Console.WriteLine("nValue的值为o}",nValue)i ∥错误,静态方法引用了非静态成员 Console.WriteLine("staticValuel的值为o",staticValue); public void Display() Console.WriteLine("实例方法调用); Console.WriteLine("nValuel的值为{o}",nValue); Console.WriteLine("staticValuel的值为O}",staticValue; ∥没问题,实例方法可以引用静态成员 9
9
class Program static void Main(string[args) ∥SimpleMath.Display();∥错误I,实例方法必须由实例调用 SimpleMath.staticDisplay(); SimpleMath smp new SimpleMath(); ∥smp.static Display()片∥错误!,静态方法必须由类名调用 smp.Display(); Console.ReadLine(); 10
10