C#程序设计 第3章C#面向对象编程
C# 程序设计 第3章 C#面向对象编程
基本内容 属性 索引器 方法的参数 小结
2 基本内容 属性 索引器 方法的参数 小结
本节目标 ■理解面向对象的基本概念 ■理解类和对象的区别和联系 ■掌握属性的使用 ■区别只读属性和可读写属性 ■掌握方法的声明和使用 3
3 本节目标 ▪ 理解面向对象的基本概念 ▪ 理解类和对象的区别和联系 ▪ 掌握属性的使用 ▪ 区别只读属性和可读写属性 ▪ 掌握方法的声明和使用
数据安全 示例 static void Main(string args) Student myStudent=new Student(); myStudent.age =-2; 非法数据 myStudent.id ="123456"; 有时候将类中 的字段公开是 身份证号不能被修改 不安全的 无法正常赋值 如果设为私有成员 无法获得数据 问题 能否对这些字段进行规则约束或者只读呢?
4 数据安全 static void Main(string[] args) { Student myStudent = new Student(); myStudent.age = -2; myStudent.id = "123456"; } 非法数据 身份证号不能被修改 无法获得数据 无法正常赋值 有时候将类中 的字段公开是 不安全的 如果设为私有成员 能否对这些字段进行规则约束或者只读呢?
什么是属性(property) [属性修饰符类型属性名 C#不直接访问类的数据 get{return字段名;} 通过访问器访问(get,set) set{字段名=value;} class Student 属性的类型和字段类 型必须一致。 get和set都存在:读写属性 ∥姓名 private string name; 只有get时:只读属性 public string Name 只有set时:只写属性 get return name; 返回name set name value; 给name赋值 get用于获取 set用于设置 相应字段的值 字段的值 5
5 什么是属性(property) ▪ C#不直接访问类的数据 ▪ 通过访问器访问(get,set) class Student { // 姓名 private string name; public string Name { get { return name; } set { name = value; } } } 返回name get用于获取 set用于设置 相应字段的值 字段的值 只有get时:只读属性 只有set时:只写属性 get和set都存在:读写属性 属性的类型和字段类 型必须一致。 给name赋值 [属性修饰符]类型 属性名 { get {return 字段名;} set {字段名 = value;} }
属性的特点 private int age;∥年龄 public int Age 类型可以是各种数据类型,如:对象、数组等等 { get return age;} set { 控制私有字段的可访问性 if(value>0&&value 100) { 保护内部数据的安全 age value; else age 18; 建议类内部敏感字段使用 属性来控制访问 6
6 属性的特点 private int age; //年龄 public int Age { get { return age; } set { if (value > 0 && value < 100) { age = value; } else { age = 18; } } } 控制私有字段的可访问性 保护内部数据的安全 建议类内部敏感字段使用 属性来控制访问 类型可以是各种数据类型,如:对象、数组等等
在类中使用属性 private int age;∥年龄 不公开age public int Age 录入非法数据 { 公开Age get return age; myStudent.Age =-20; set .打印 myStudent.Age =40; if (value>0&&value<100) .打印 没有访问age age value; } 打印私有变量age else C:\TIHDOTS\system32\cmd.exe =▣x 年龄是18 age 18; 年龄是40 请按任意键继续 通过公有Age访问和约束私有字段age 演示示例: MyAttribute
7 在类中使用属性 private int age; //年龄 public int Age { get { return age; } set { if (value > 0 && value < 100) { age = value; } else { age = 18; } } } myStudent.Age = -20; .//打印 myStudent.Age = 40; .//打印 没有访问age 公开Age 录入非法数据 打印私有变量age 演示示例: MyAttribute 不公开age 通过公有Age访问和约束私有字段age
属性注意事项 ■属性可以被声明为 public,private,protected,internal,or protected internal ■同一属性的get和set可以有不同的访问限制 ■不能同时为get、set指定访问修饰符。 ■get或set的访问修饰符可以和属性不同,但必须是比属 性有更高的限制 8
8 属性注意事项 ▪ 属性可以被声明为 ◼ public, private, protected, internal, or protected internal ◼ 同一属性的get和set可以有不同的访问限制 ◼ 不能同时为get、set指定访问修饰符。 ◼ get或set的访问修饰符可以和属性不同,但必须是比属 性有更高的限制
自动实现的属性 class Point class Point public int X get;set; } private int x; public int Y{get;set; private int y; g puiic Sring Name ge;privat public int X public int CustomerID get;prit get return x; 州木还穴头小州以俩工,州时⊙心 set x value; public int Y { get return y; set {y value; } 9
9 自动实现的属性 ▪ 自动实现的属性声明的基本形式如下: ◼ [属性修饰符] 类型 属性名{get;set;}[;] ▪ 编译器将创建一个私有的匿名后备字段,该字段只能通过 属性的 get 和 set 访问器进行访问 ▪ 必须同时定义get和set访问器 ▪ 如果想只读访问该属性,则将set访问器设置为private
基本内容 属性 索引器 方法的参数 小结
10 基本内容 属性 索引器 方法的参数 小结