iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0
Software Development

我要轉職成 C# / .NET 工程師系列 第 21

類別(一)-類別成員、存取修飾詞

  • 分享至 

  • xImage
  •  

class(類別)可以說是物件導向程式語言的核心,透過類別將資料、函式等內容包裝在成一個物件,並在封裝時透過存取修飾詞,達到資訊隱藏的目的。相對於C++與Java,C#的class有提供一些比較有趣的功能,例如:property。

類別成員

  • 資料成員(data member)
    1. 欄位(field)
    2. 常數(constant)
    3. 事件(event)
  • 函式成員(function member)
    1. 方法(method)
    2. 內容函式(property)
    3. 索引函式(indexer)
    4. 建構函式(constructor)
    5. 解構函式(destructor)
    6. 運算函式(operator)
  • 型別成員(type member)
    • 任意類別(包含巢狀類別)

資料成員(data member)

欄位(field)是最常見的資料成員,可以儲存物件的資料,並可以透過static、readonly、const修飾詞達到不同的功用。例如欄位設定成static會讓資料達到全域變數的效果。設定成readonly或const可以成為常數(constant)達到不可更改的效果。const為編譯成IL後值不能更改的常數,readonly是CLR執行後值不可以更改的常數。事件(event)有一點特別,今天就依照書本上歸類為資料成員。

函式成員(function member)

在物件導向程式語言中函式(function)又被稱呼為方法(method),這稱呼起源於Smalltalk。在C#中方法(method)是函式成員的一種,另外還有不同情況對應執行的函式,如內容函式(property)是偽裝成欄位的函式、索引函式(indexer)是偽裝成陣列的函式、建構函式(constructor)是物件初始化實例化時執行的函式、解構函式(destructor)是物件清除時執行的函式、運算函式(operator)是作為類別進行四則運算或是轉型運算執行的函式,先前文章實作轉型運算時我們稱呼為轉型運算子,但在我們實作operator時可以發現本質上是在撰寫一個函式。

型別成員(type member)

型別成員指的是可以在類別中包入類別或結構,也可以包入類別本身形成巢狀類別。
https://ithelp.ithome.com.tw/upload/images/20191007/20120420Oq4FYq5e09.png

存取修飾詞 Access Modifier

modifier的中文翻譯有好幾種,修飾子、修飾詞、修飾字、修飾元等等,這邊就用存取修飾詞這個名稱,運用存取修飾詞可以幫我們的類別與類別成員進行封裝,限制他人能不能存取、能不能使用、能不能看見,來達到資訊隱藏的目的。以下為四種等級的存取修飾詞

  1. public(公開的):任何人都可見、都可使用。
  2. private(私密的):只有內部自己可以使用。這是類別成員的預設值。
  3. protected(受保護的):相對於private只限自己,protected包含自己與繼承被繼承的家族內部可以使用。
  4. internal(內部的):相對於private與protected,限制在.NET組件內部自己可以使用。這是類別的預設值。

不能逾越存取修飾詞的限制

權限由最開放到最小,例如:不能繼承internal類別後,將被繼承類別public給外部使用等。這些存取修飾詞的使用錯誤C#編譯器都會提示我們。
https://ithelp.ithome.com.tw/upload/images/20191007/20120420YLHFZVXBNw.png


上一篇
可為null的型別
下一篇
Property翻譯成內容函式,比翻成屬性還要好懂
系列文
我要轉職成 C# / .NET 工程師34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言