類,是面向對象語言的基礎。類的三大特性:封裝、繼承、多態。最基本的特性就是封裝性。
程序員用程序描述世界,將世界的所有事物都看成對象,怎麼描述這個對象?那就是類了。也就是用類來封裝對象。用書上的話說,類是具有相同屬性和行為的對象的抽象。寶馬汽車、別克汽車、五菱之光汽車... 基本具有相同的屬性和行為,所以可以抽象一個汽車類,當然也可以把路人甲的寶馬汽車、路人乙的別克汽車... 抽象一個汽車類。
類抽象完成後,可以實例化,實例化後的稱之為一個對象,然後可以對屬性賦值或運行類的方法。屬性和方法同每個對象關聯,不同的對象有相同的屬性,但屬性值可能不同;也具有相同的方法,但方法運行的結果可能不同。
類的屬性和方法是被類封裝的。
看如下類的定義:
[csharp]
1. using System;
2.
3. namespace YYS.CSharpStudy.MainConsole
4. {
5. /// <summary>
6. /// 定義一個學校類
7. /// 這個類只有屬性,沒有方法(其實確切的來說是有一個默認的構造器方法)
8. /// </summary>
9. public class YSchool
10. {
11. /// <summary>
12. ///字段, 類裡面定義的變量稱之為“字段”
13. /// 保存學校的ID
14. /// </summary>
15. private int id = 0;
16.
17. /// <summary>
18. /// 保存學校的名字
19. /// </summary>
20. private string name = string.Empty;
21.
22. /// <summary>
23. /// 屬性,字段作為保存屬性值的變量,而屬性則有特殊的“行為”。
24. /// 使用get/set來表示屬性的行為。get取屬性值,set給屬性賦值。因此get/set稱為“訪問器”。
25. ///
26. /// ID屬性
27. /// </summary>
28. public int ID
29. {
30. get
31. {
32. //get返回一個值,表示當前對象的該屬性的屬性值。
33. return this.id;
34. }
35. //這裡的.號用於訪問對象的屬性或方法。
36. //this指當前對象,意即哪個實例在操作屬性和方法,this就指哪個實例。
37. set
38. {
39. //局部變量value,value值是用於外部賦給該該屬性的值。
40. this.id = value;
41. }
42. }
43. /// <summary>
44. /// 姓名屬性
45. /// </summary>
46. public string Name
47. {
48. get
49. {
50. return name;
51. }
52.
53. set
54. {
55. name = value;
56. }
57. }
58. }
59.
60. public class YTeacher
61. {
62. private int id = 0;
63.
64. private string name = string.Empty;
65.
66. //這裡將YSchool類作為了YTeacher的一個屬性。
67. private YSchool school = null;
68.
69. private string introDuction = string.Empty;
70.
71. private string imagePath = string.Empty;
72.
73. public int ID
74. {
75. get
76. {
77. return id;
78. }
79.
80. set
81. {
82. id = value;
83. }
84. }
85.
86. public string Name
87. {
88. get
89. {
90. return name;
91. }
92.
93. set
94. {
95. name = value;
96. }
97. }
98.
99. public YSchool School
100. {
101. get
102. {
103. if (school == null)
104. {
105. school = new YSchool();
106. }
107. return school;
108. }
109.
110. set
111. {
112. school = value;
113. }
114. }
115.
116. public string IntroDuction
117. {
118. get
119. {
120. return introDuction;
121. }
122.
123. set
124. {
125. introDuction = value;
126. }
127. }
128.
129. public string ImagePath
130. {
131. get
132. {
133. return imagePath;
134. }
135.
136. set
137. {
138. imagePath = value;
139. }
140. }
141.
142. /// <summary>
143. /// 給學生講課的方法
144. /// </summary>
145. public void ToTeachStudents()
146. {
147. //{0},{1},{2}是占位符,對應後面的參數。一般如果顯示的內容中含有參數,我比較喜歡用string.Format。
148. Console.WriteLine(string.Format(@"{0} 老師教育同學們: Good Good Study,Day Day Up!", this.name));
149. }
150. /// <summary>
151. /// 懲罰犯錯誤學生的方法
152. /// </summary>
153. /// <param name="punishmentContent"></param>
154. public void PunishmentStudents(string punishmentContent)
155. {
156. Console.WriteLine(string.Format(@"{0} 的{1} 老師讓犯錯誤的學生 {2}", this.school.Name, this.name, punishmentContent));
157. }
158.
159. //字段、屬性和方法前修飾符有:public,private,protected,internal
160. //public,字段、屬性和方法均為公開的,不僅類中的其它成員能訪問到,還可以通過類的實例訪問的到。
161. //private,字段、屬性和方法均為私有的,只能被類中的其它成員訪問到,不能通過類的實例訪問。
162. //protected,包含private特性,而且protected修飾的字段、屬性和方法能被子類訪問到。
163. //internal,在同一個程序集中和public一樣,但是不能被其它程序集訪問,而且子類的話,只能被同一個命名空間的子類訪問到。
164. }
165. }
[csharp]
1. using System;
2.
3. namespace YYS.CSharpStudy.MainConsole
4. {
5. class Program
6. {
7. static void Main(string[] args)
8. {
9. //實例化具體對象,並且賦值
10. YSchool shool1 = new YSchool();
11.
12. shool1.ID = 1;
13.
14. shool1.Name = "清華附中";
15.
16. YSchool school2 = new YSchool();
17.
18. school2.ID = 2;
19.
20. school2.Name = "北師大附中";
21.
22. YTeacher techerS = new YTeacher();
23.
24. techerS.ID = 1;
25.
26. techerS.Name = @"尚進";
27.
28. techerS.School = shool1;
29.
30. techerS.IntroDuction = @"很嚴厲";
31.
32. techerS.ImagePath = @"http://";
33.
34. //運行當前實例的方法
35. techerS.ToTeachStudents();
36.
37. //運行當前實例的方法,傳入參數
38. techerS.PunishmentStudents(@"抄所有學過的唐詩一百遍");
39.
40. Console.WriteLine();
41.
42. YTeacher techerQ = new YTeacher();
43.
44. techerQ.ID = 2;
45.
46. techerQ.Name = @"秦奮";
47.
48. techerQ.School = school2;
49.
50. techerQ.IntroDuction = @"和藹可親";
51.
52. techerQ.ImagePath = @"http://";
53.
54. techerQ.ToTeachStudents();
55.
56. techerQ.PunishmentStudents(@"抄所有學過的數學公式一遍");
57.
58. Console.ReadKey();
59. }
60. }
61. }
、
結果
:
作者:yysyangyangyangshan