[TOC]
# 內置引用類型
## 對象(Object)類型
對象(Object)類型?是 C# 通用類型系統(Common Type System - CTS)中所有數據類型的終極基類。Object 是 System.Object 類的別名。所以對象(Object)類型可以被分配任何其他類型(值類型、引用類型、預定義類型或用戶自定義類型)的值。但是,在分配值之前,需要先進行類型轉換。
當一個值類型轉換為對象類型時,則被稱為?裝箱;另一方面,當一個對象類型轉換為值類型時,則被稱為?拆箱。
```
object?obj;
obj?=?100;?//?這是裝箱
```
## 動態(Dynamic)類型
您可以存儲任何類型的值在動態數據類型變量中。這些變量的類型檢查是在運行時發生的。
**聲明動態類型的語法:**
>[info]dynamic??=?value;
例如:
```
dynamic?d?=?20;
```
>[danger]動態類型與對象類型相似,但是對象類型變量的類型檢查是在編譯時發生的,而動態類型變量的類型檢查是在運行時發生的。
## 字符串(String)類型
字符串(String)類型是 System.String 類的別名。它是從對象(Object)類型派生的。
字符串(String)類型的值可以通過兩種形式進行分配:引號和 @引號。
```
String?str?=?"w3cschool.cc";
//或者
@"w3cschool.cc";
```
C# string 字符串的前面可以加 @(稱作"逐字字符串")將轉義字符(\\)當作普通字符對待,比如:
```
string?str?=?@"C:\\Windows";
//等價于:
string?str?=?"C:\\\\Windows";
```
@ 字符串中可以任意換行,換行符及縮進空格都計算在字符串長度之內。
```
string?str?=?@"<script type=""text/javascript"">
????var a=1;
????";
```
定義相等運算符`==`和`!=`是為了比較`string`對象(而不是引用)的值
```
string a = "hello";
string b = "h";
// Append to contents of 'b'
b += "ello";
Console.WriteLine(a == b);//a和b都是string類型所以返回true
Console.WriteLine(object.ReferenceEquals(a, b));//false
```
# **聲明自定義引用類型**
用戶自定義引用類型有:class、interface 或 delegate,record。
* [class](https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/class)
* [interface](https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/interface)
* [delegate](https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/reference-types#the-delegate-type)
* [record](https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/record)
- Visual Studio 2022安裝到非C盤
- .net平臺區別
- 常用單詞
- 關鍵字
- 操作符(運算符)
- 標識符(命名規范)
- 開始
- 變量
- 常量
- 數據類型
- 值類型
- 變量數據類型
- 枚舉類型enum(常量集合)
- 結構類型struct(結構體)
- 元組類型
- 可null類型(T?)
- 引用類型
- 數組(array)
- 集合(List)
- 內置引用類型
- object
- string
- Dynamic(動態類型)
- delegate委托(代理)類型
- 自定義引用類型
- 接口(interface)
- 類class
- record(定義一個引用類型)
- 指針類型(僅用于非安全代碼)
- get和set訪問器
- delegate委托
- delegate實現發布訂閱與事件
- 類型轉換
- 合并操作符??
- 類相關
- Partial 部分類
- 類定義以及訪問修飾符(封裝)
- abstract抽象類與sealed密封類
- virtual虛方法
- 接口interface
- C# 預處理器指令
- C#技術棧
- 判斷(流程控制)與三元運算
- if
- switch
- 三元運算
- 循環
- while 循環
- for循環
- foreach循環
- do...while 循環
- 文件操作
- 其他
- 多開