iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
Modern Web

ASP.NET Web Form 入門30天系列 第 12

[ASP.NET] [C#] 物件導向 - 十分鐘聽我說 類別 (一)

  • 分享至 

  • xImage
  •  

本篇擷取重點:

  • 類別
  • 類別語法
    • 存取修飾詞
    • 欄位資料成員
    • 屬性資料成員
    • 方法成員

一、類別

  • 類別主要的功能是用來描述定義物件的模樣
  • 類別只是一個抽象的概念,是屬抽象資料型別。
  • 類別由資料成員方法成員組成。
  • 物件是由類別所建立出具體化的實體。
  • 建立物件前必須先定義類別,再用 new 建立屬於該類別物件的實體
  • 物件具封裝特性,才能達保護(隱藏)資料目的,這是傳統程序導向程式設計無法達到的。外界必須透過物件擁有的類別方法成員才能存取資料成員。

二、定義類別語法

https://ithelp.ithome.com.tw/upload/images/20190913/201200568qAa7Hc6Lw.jpg


1. 常用成員存取修飾詞

  • private 將該成員宣告成私有層級,只供自身類別內部成員存取,外界無法直接存取。(若省略存取修飾詞不寫,預設為 private。)
  • public 將該成員宣告成公用層級,使該成員不受任何限制,可供外界直接存取。
  • protected 將該成員宣告成保護層級,使該成員可供自身類別(父類別)和衍生類別(子類別)存取。

2. 欄位資料成員

欄位資料成員為類別內所定義的變數。
欄位定義方式和一般變數相同。

https://ithelp.ithome.com.tw/upload/images/20190914/20120056stBqWdLGiN.png

==================================================================
貼心小補充:

  1. 欄位:通常將存取修飾詞設為 private,然後宣告唯獨 (readonly 修飾詞),作為 【類別內部】 用來儲存資料使用。(readonly的使用是為了在類別建構式設定其值之後其他的程式就不能改變該變數的值,因此 private readonly 的意思是 "只能限在類別內使用,而且在初始化後就不能改變其值")

  2. 有一個容易混淆的點需要釐清,主程式 main() 方法內的定義變數不能稱為稱為資料成員,因為它並不是欄位而是區域變數,是存在於方法 (函式) 層次 (function-level) 的變數,方法可以存取欄位,但類別中的其他方法並無法存取特定方法內的變數。

  3. 欄位與區域變數之差異,用存取範圍來敍述會比較清楚。

  • 欄位 (field) 有些書會叫它成員變數 (member variable),意指是在類別層次 (class-level) 的資料。
  • 區域變數是存在於方法 **(函式) 層次 (function-level) **的變數。

感謝@studyazure大大的更正及觀念提供!!

==================================================================


3. 屬性資料成員

屬性 配合 get/set 存取子來設定或取得(存取)欄位資料的內容,以保護欄位資料內容。

https://ithelp.ithome.com.tw/upload/images/20190913/20120056OyWyT0qdTr.jpg

==================================================================
貼心小補充:

屬性:通常將存取修飾詞設為 public ,透過 get 和 set 來控制外部的存取及修改,來達到對屬性的封裝。

==================================================================


4. 方法成員

  • 為達物件資訊隱藏特性:
    • 將資料成員設為 private 私用層級,
    • 再將方法成員設為 public 公開層級來存取資料成員的內容。
  • 外界必須透過此方法成員間接存取資料成員,無法直接存取資料成員。

https://ithelp.ithome.com.tw/upload/images/20190913/20120056dMjyGj7m3T.jpg

參考資料:
http://dog0416.blogspot.com/2017/11/cvisual-studio-class-and-object.html


明日(9/14)預定探討課題:

  1. 類別之實際範例
  2. 更深入的探討方法 - 一般方法、類別方法和建構式


上一篇
[ASP.NET] [C#] 物件導向 - 類別及物件的觀念確立 ( + 命名空間在幹嘛?! )
下一篇
[ASP.NET] [C#] 物件導向 - 十分鐘聽我說 類別 (二)
系列文
ASP.NET Web Form 入門30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
小朱
iT邦新手 4 級 ‧ 2019-09-13 18:14:04
  1. "不能將主程式 main() 方法內定義變數稱為資料成員。"
    不知道這是哪本書裡面寫的?
    不論是否為main()方法,只要是定義在方法內的變數都不能稱作是該類別的資料成員,一般會用區域變數 (local variable) 來稱呼,在方法內定義的變數,可用範圍就只在方法內,一跑出方法就不能用了。

  2. 屬性用 { get; set; } 是為了簡化一些不用特別規則,只做賦值與取值的程式實作,不過您的例子的 get 和 set 放反了喔。

  3. readonly的使用是為了在類別建構式設定其值之後其他的程式就不能改變該變數的值,因此 private readonly 的意思是 "只能限在類別內使用,而且在初始化後就不能改變其值",即便是用屬性 set 亦然,所以您的說法可能要修正一下。

  1. 是一份學校上課用的PPT,但是由於資料是別人給我的,所以確切出處我也不清楚...,不過聽完大大下方的解釋,我覺得PPT作者的用意可能是要我們對欄位及一般的區域變數作區分(?),所以這部分要怎麼表示較佳呢?
  2. 真的放反欸,馬上修正XDD
  3. 原來如此!!
小朱 iT邦新手 4 級 ‧ 2019-09-14 12:13:20 檢舉

欄位 (field) 有些書會叫它成員變數 (member variable),意指是在類別層次 (class-level) 的資料,區域變數是存在於方法 (函式) 層次 (function-level) 的變數,方法可以存取欄位,但類別中的其他方法無法存取特定方法內的變數,用存取範圍來敍述會比較清楚。

恩恩,聽完大大的詳細解釋就清楚了,謝謝您 XDD

我要留言

立即登入留言