## 存取修飾詞詳解
在 C# 中有四種主要的存取修飾詞,但作為初學者,你最常用到的是以下兩種:
1. **Public**: 任何腳本都可以無限制地訪問
2. **Private**: 只能在它們被創建的類別(稱為包含類別)中訪問。任何沒有存取修飾詞的變數預設都是 Private
另外兩種進階的修飾詞特性如下:
- **Protected**: 可從其包含類別或衍生自該類別的型別中訪問
- **Internal**: 只能在當前組件中使用(組件是自動生成的檔案,它將程式碼、資源等所有內容打包在一起)
更新 LearningCurve 的步驟:
1. 將 CurrentAge 前面的存取修飾詞從 public 改為 private 並儲存檔案
2. 回到 Unity,選擇 Main Camera,觀察 LearningCurve 部分的變化
由於 CurrentAge 現在是 private,它在 Inspector 視窗中不再可見,只能在 LearningCurve 腳本中通過程式碼訪問。點擊 Play 後,腳本仍會和之前一樣運作。
## 使用型別
在變數中指定特定型別是一個重要的選擇,它會影響變數整個生命週期中的每一個互動。由於 C# 是所謂的強型別(strongly typed)或型別安全(type-safe)語言,每個變數都必須有一個資料型別,沒有例外。相比之下,像 JavaScript 這樣的程式語言是非型別安全的。
### 常見的內建型別
C# 中的所有資料型別都源自(或稱為衍生自)一個共同的祖先: System.Object。這種層次結構稱為通用型別系統(Common Type System, CTS),意味著不同型別有許多共享的功能。以下是一些最常見的資料型別選項:
```csharp
public class LearningCurve : MonoBehaviour
{
private int CurrentAge = 30;
public int AddedAge = 1;
public float Pi = 3.14f;
public string FirstName = "Harrison";
public bool IsAuthor = true;
void Start()
{
ComputeAge();
Debug.Log($"A string can have variables like {FirstName} inserted directly!");
}
void ComputeAge()
{
Debug.Log(CurrentAge + AddedAge);
}
}
```
注意事項:
- 處理字串型別時,實際的文字值需要放在一對雙引號內
- float 值需要以小寫 f 結尾,如 Pi 的例子所示
- bool 變數在 Unity 中顯示為核取方塊(勾選表示 true,未勾選表示 false)
### 字串插值
數字型別的行為與你在學校學到的數學一樣,但字串有所不同。通過在開頭加上 $ 字元(稱為字串插值),可以直接在文字中插入變數和字面值。你已經在 LogFormat() 除錯中使用過插值字串,加上 $ 字元讓你可以在任何地方使用它們!
字串插值示例:
```csharp
Debug.Log($"A string can have variables like {FirstName} inserted directly!");
```
### 型別轉換
由於變數只能保存其宣告型別的值,但有時我們需要組合不同型別的變數。在程式設計術語中,這些稱為轉換,主要有兩種:
1. **隱式轉換**:自動進行,通常是當較小的值可以無需四捨五入就能放入另一個變數型別時:
```csharp
int MyInteger = 3;
float MyFloat = MyInteger; // 自動轉換為 3.0f
Debug.Log(MyInteger); // 顯示 3
Debug.Log(MyFloat); // 顯示 3
```
2. **顯式轉換**:當轉換過程中可能會丟失變數資訊時需要進行。例如,將 double 值轉換為 int 值時,需要通過在要轉換的值前加上目標型別的括號來明確轉換:
```csharp
int ExplicitConversion = (int)3.14; // 結果為 3
```
### 推斷宣告
C# 可以從指派的值推斷變數的型別。例如,var 關鍵字可以讓程式知道資料型別需要由其值來決定:
```csharp
var CurrentAge = 32; // 推斷為 int 型別
```
雖然這在某些情況下很方便,但不建議過度使用推斷變數宣告。這會讓你的程式碼增加許多猜測的成分,而程式碼應該要清晰明確。推斷變數宣告真正應該只在測試程式碼且不知道儲存的資料型別時使用。一旦知道了資料型別,建議將變數宣告改為特定型別以避免後續的執行時期錯誤。