Presentation is loading. Please wait.

Presentation is loading. Please wait.

C#面向对象程序设计 $6 深入理解类.

Similar presentations


Presentation on theme: "C#面向对象程序设计 $6 深入理解类."— Presentation transcript:

1 C#面向对象程序设计 $6 深入理解类

2 面向对象的方法学 面向过程的方法 功能与数据分离 自顶向下的分析 基于模块的设计 面向对象的方法 数据+操作对象 对象+类+继承+通信

3 面向对象的方法学 对象类(抽象化) Shape

4 面向对象的方法学 对象类(抽象化) 类对象(具体化) Student 范小飞 2年级1班 王艳 2年级3班 刘强 5年级1班

5 面向对象的方法学 继承 Shape Triangle Rectangle Ellipse Polygon Square Circle

6 深入理解类 类的成员

7 类的成员 数据成员 字段 方法成员 普通方法 构造函数和析构函数 属性 索引函数 事件 操作符

8 类的成员 构造函数 静态构造函数 构造函数的名称与类名相同 构造函数不声明返回类型
构造函数通常是公有的(public修饰符声明),否则(私有/保护)该构造函数不能用于类的实例化 实例构造函数:对象初始化 带参构造函数:按需求初始化 静态构造函数 在程序中第一次用到某个类时,类的静态构造函数自动被调用,而且仅此一次。 静态构造主要用于类的静态字段进行初始化,它不能使用任何限制修饰符。

9 构造函数示例 //程序清单P6_1.cs: using System; namespace P6_1 {
public class ConstructorSample public static void Main() Contact c1 = new Contact(); c1.Output(); Contact c2 = new Contact("赵丽"); c2.Output(); Contact c3 = new Contact("李明", 25, true); c3.Output(); } public class Contact { public string m_name; protected int m_age = 0; protected bool m_gender = false; //默认构造函数 public Contact() m_name = "Unknown"; } //带参数的构造函数 public Contact(string name) m_name = name;

10 构造函数示例(续) public Contact(string name, int age, bool gender) {
m_name = name; m_age = age; m_gender = gender; } //析构函数 ~Contact() { } //普通方法 public void Output() Console.WriteLine("姓名{0} 年龄{1} 性别{2}", m_name, m_age, m_gender ? '男' : '女');

11 静态构造函数示例 //程序清单P6_2.cs: using System; namespace P6_2 {
public class StaticConstructorSample public static void Main() Contact c1 = new Contact("李明"); Contact c2 = new Contact("赵丽"); Contact c3 = new Contact("王强"); } public class Contact { public string m_name; public static int m_objects = 0; public static int m_classes = 0; //构造函数 public Contact(string name) Console.WriteLine("构造对象: " + name); m_name = name; m_objects++; Console.WriteLine("对象数量: " + m_objects); } //静态构造函数 static Contact() Console.WriteLine("构造类"); m_classes++; Console.WriteLine("类数量: " + m_classes);

12 类的成员 析构函数 关于析构函数的执行在第7章举例 析构函数的名称与类名相同,但在前面需要加一个符号“~”
析构函数不接受任何参数,也不返回任何值 析构函数不能使用任何访问限制修饰符 析构函数通常只进行销毁对象的工作,而不因该执行其他的操作 析构函数不能被继承,也不能被显示地调用 关于析构函数的执行在第7章举例

13 类的成员 属性 封装对字段的访问 一对特殊方法 get访问器 set访问器 读写控制

14 属性示例 //程序清单P6_3.cs: using System; namespace P6_3 {
public class PropertySample public static void Main() Console.WriteLine("请输入联系人姓名:"); Contact c1 = new Contact(Console.ReadLine()); Console.WriteLine("请输入联系人生日(yyyy-mm-dd):"); c1.Birthday = DateTime.Parse(Console.ReadLine()); //DateTime.TryParse(Console.ReadLine(), out p1.Birthday); Console.WriteLine("{0}的年龄为: {1}", c1.Name, c1.Age); }

15 属性示例(续) public class Contact { //字段 private string m_name;
private DateTime m_birthday; //属性 public string Name get return m_name; } public DateTime Birthday return m_birthday; set m_birthday = value;

16 属性示例(续) public int Age { get
return DateTime.Now.Year - m_birthday.Year; } //构造函数 public Contact(string name) m_name = name;


Download ppt "C#面向对象程序设计 $6 深入理解类."

Similar presentations


Ads by Google