C#语言 第一部分 面向对象 (二) 类
类是面向对象的基础,类表现出的最基本特性是其“封装性”。类是某一些具有相同属性和行为对象的抽象。例如:波斯猫、野猫、家猫、花猫都具有相同的属性和行为,所以被抽象成为猫类。
类具有属性和方法,表示这个类所代表的对象具有的特性和行为。从类实例化对象后,对象就可以给类中定义的属性“赋值”或运行类中定义的方法,属性和方法和每个对象相关,即相同类的不同的对象具有相同的属性,但属性的属性值可以不同;具有相同的方法,但方法运行的结果可以不同。
类需要将和其相关的属性和方法“封装”起来,并和对象进行绑定。
看下面的例子,自行理解:
1 using System;
2
3 namespace Edu.Study.OO.Class {
4
5 /// <summary>
6 /// 定义一个Person类,表示人
7 /// </summary>
8 public class Person {
9
10 /// <summary>
11 /// 在类中定义的变量称为“字段”
12 /// name为一个string类型的字段,保存人的名字
13 /// </summary>
14 private string name;
15
16 /// <summary>
17 /// 保存年龄
18 /// </summary>
19 private int age;
20
21 /// <summary>
22 /// 保存性别,true为男性,false为女性
23 /// </summary>
24 private bool sex;
25
26 /// <summary>
27 /// 属性定义,在面向对象编程里,字段作为保存属性值的变量,而属性则需要使用特殊的“行为”来表现
28 /// 一般来说,一对get/set行为用来展现对象的属性,其中get用于获取该对象的属性;set用于设置该对象的属性
29 /// get/set称为属性的“访问器”
30 ///
31 /// 姓名属性
32 /// </summary>
33 public string Name {
34 get {
35 // get访问器必须返回一个值,作为该属性的“属性值
36 return this.name;
37
38 // . 运算符的作用是访问某个对象的属性或方法
39 // this关键字表示“当前实例”,即哪一个对象正在操作属性访问器,this就表示哪个对象
40 // 所以一般说法,this表示“当前对象”,使用this.访问的是“声明在本类中”的属性和方法
41 }
42 set {
43 // set访问器具有一个局部变量value,该值是从外部设置给该属性的值
44 this.name = value ;
45 }
46
47 // 属性的基本要求:get访问器必须返回一个值,该值类型和属性类型相同;set访问器可以设置一个值,这个值保存在什么地方倒无所谓
48 }
49
50 /// <summary>
51 /// 年龄属性
52 /// </summary>
53 public int Age {
54 get {
55 return age;
56 }
57 set {
58 age = value ;
59 }
60 }
61
62 /// <summary>
63 /// 性别属性
64 /// </summary>
65 public bool Sex {
66 get {
67 return sex;
68 }
69 set {
70 sex = value ;
71 }
72 }
73
74 /// <summary>
75 /// 显示个人信息的方法
76 /// </summary>
77 public void ShowMe () {
78 // 输出,其中:
79 // 形如{0}, {1}称为“占位符”,当输出内容时,这些占位符会被第一个参数之后的参数“依次取代”,例如:
80 // {0}会被this.Name的值取代,即被第一个参数取代
81 // {1}会被this.Sex的值取代,即被第二个参数取代
82 // {n}会被第n+1个参数取代。
83 // 使用this.Name,此时属性Name的get访问器会运行,返回Name属性的属性值,其它属性同理
84 Console.WriteLine("姓名:{0},性别:{1},年龄:{2}岁。" , this.Name, this.Sex, this.Age) ;
85 }
86
87 // 字段、属性和方法前面,都可以使用public, protected, private和internal这四种访问修饰符来修饰
88 // public表示字段、属性或方法为“公开”,公开的成员不仅可以被类中的其它成员访问到,也可以通过这个类的对象访问到
89 // private表示字段、属性或方法为“私有”,私有的成员只能被类中的其它成员访问到,无法通过类的对象访问到
90 // protected和internal稍候介绍
91 }
92
93 class Program {
94 static void Main(string[] args) {
95 // 通过new运算符可以实例化一个对象
96 // 实例化Person类的对象,保存在person变量中
97 Person p1 = new Person();
98 Person p2 = new Person();
99
100 // 设置person对象的各个属性,使用person.Name = "王宝宝",Name属性的set访问器会被运行,等号右边的值"王宝宝"传递给set访问器的value变量
101 p1.Name = "王宝宝";
102 p1.Age = 21;
103 p1.Sex = false;
104
105 p2.Name = "李大大";
106 p2.Age = 18;
107 p2.Sex = true;
108
109 // 使用 . 操作符访问person对象的ShowMe方法,显示结果
110 p1.ShowMe();
111 p2.ShowMe();
112
113 }
114 }
115 }