---
# System prepended metadata

title: C# Class類別 介紹
tags: [tutorials]

---

---
title: C# Class類別 介紹
tags: tutorials
disqus: hackmd
---
<style>

.text-center{
    text-align: center; //文字置中
}
.text-left{
    text-align: left; //文字靠左
}
.text-right{
    text-align: right; //文字靠右
}

</style>

# C# Class 類別 介紹




## 1. 什麼是 Class 類別?
類別是一種定義資料結構的外觀及資料如何儲存、管理及傳遞的==模板==。

類別是物件的概念與結構宣告，物件則是類別的實體。

類別是物件導向(OOP)程式語言的基礎靈魂，程式再建立實體物件，並對物件做運算等等動作。

![](https://i.imgur.com/6wsJRMo.png)

<p class="text-center"> 
【圖一】 C#中撰寫範例 <br/>
圖中可知在C#中以Class{...}來定義一個類別，<br/>類別定義是一個全域宣告的概念，<br/>
類別要放在namespace{...}內，但不能放在方法中。
</p>
    




## 2. Class架構

類別內可以有建構函式 (Constructor)、屬性 (Properties)、欄位 (Field)、方法 (Method)
![](https://i.imgur.com/tSdWDlH.png)

<p class="text-center"> 
【圖二】 C#中撰寫範例 
</p>








![](https://i.imgur.com/jo35s6G.png)

<p class="text-center"> 
【圖三】 C#中主程式呼叫圖二中的Class<br/>
建立實體物件，透過建構函式把送入的參數指給物件中的欄位，<br/>並馬上印出這個物件的資訊。
</p>



## 3. 存取修飾詞
存取修飾詞就是你在圖一~圖三在宣告一些物件時前面會有的key word

<table>
<thead>
<tr>
<th>存取修飾詞</th>
<th>作用</th>
<th>存取範圍</th>
</tr>
</thead>
<tbody>
<tr>
<td>public</td>
<td>公開</td>
<td>無限制</td>
</tr>
<tr>
<td>private(預設)</td>
<td>私有</td>
<td>只有本身類別可以存取</td>
</tr>
<tr>
<td>protected</td>
<td>保護</td>
<td>父類別或繼承自父類別的子類別(衍生類別)</td>
</tr>
<tr>
<td>internal</td>
<td>內部</td>
<td>限於目前專案(組件)</td>
</tr>
<tr>
<td>protected internal</td>
<td></td>
<td>限於目前專案或是繼承自父類別</td>
</tr>
<tr>
<td>private protected</td>
<td></td>
<td>存取限於目前專案內包含類別或衍生自包含類別的類型，自C#7.2起可用。</td>
</tr>
</tbody>
</table>

==注意:namespace是不能使用存取修飾詞的==

## 4.屬性 (Properties)與欄位 (Field)

他們倆個的關係是這樣的
欄位可以做到的事情屬性一定可以做，
屬性可以做的事情欄位不一定能做。

屬性筆欄位多的功能是他可以寫程式在get set裡
用程式去控制數值
![](https://i.imgur.com/Ut6faaQ.png)

<p class="text-center"> 
【圖四】 屬性與欄位差異
</p>

![](https://i.imgur.com/8E3zRu7.png)

<p class="text-center"> 
【圖五】 屬性這樣簡單寫存取邏輯，可以偽裝成欄位
</p>



## 5.方法 (Method)
方法就是你呼叫此類別中的某一個方法
他就會執行你要做的動作
![](https://i.imgur.com/fyAlNYB.png)
<p class="text-center"> 
【圖六】 方法的撰寫
</p>

![](https://i.imgur.com/TAQvDPf.png)
<p class="text-center"> 
【圖七】 主程式以圖六的類別時作一個物件後,呼叫此物件裡的方法。
</p>

![](https://i.imgur.com/JDvZJyi.png)
<p class="text-center"> 
【圖八】 方法支援多載(照理說兩個方法命名不可以一樣,但一個要送入參數一個不用這樣是可以的)
</p>

## 6.建構函式 (Constructor)(建構子)

建構函式顧名思義就是你去定義這個類別被new(類似build的意思)時要跑的函式。
下面有兩個例子一個有寫建構函式一個沒寫。


![](https://i.imgur.com/weIp0mt.png)
<p class="text-center"> 
【圖九】 有建構子
</p>

![](https://i.imgur.com/JYPMfrL.png)
<p class="text-center"> 
【圖十】 沒有建構子
</p>


 [[參考]C#-怎麼建立類別Class及其建構函式Constructor(建構子)、屬性 (Properties)、欄位 (Field)、方法 (Method)](https://ithelp.ithome.com.tw/articles/10213236?sc=rss.iron)

---



###### tags: `tutorial`
