# 方法(C# 編程指南)
方法是包含一系列語句的代碼塊。程序通過調用該方法并指定任何所需的方法參數使語句得以執行。在 C# 中,每個執行的指令均在方法的上下文中執行。Main 方法是每個 C# 應用程序的入口點,并在啟動程序時由公共語言運行時 (CLR) 調用。
|  注意 |
| :-- |
| 本主題討論命名的方法。有關匿名函數的信息,請參閱[匿名函數(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/bb882516.aspx)。 |
## 方法簽名
通過指定訪問級別(如 **public** 或 **private**)、可選修飾符(如 **abstract** 或 **sealed**)、返回值、方法的名稱以及任何方法參數,在[類](https://msdn.microsoft.com/zh-CN/library/0b0thckt.aspx)或[結構](https://msdn.microsoft.com/zh-CN/library/ah19swz4.aspx)中聲明方法。這些部件一起構成方法的簽名。
|  注意 |
| :-- |
| 出于方法重載的目的,方法的返回類型不是方法簽名的一部分。但是在確定委托和它所指向的方法之間的兼容性時,它是方法簽名的一部分。 |
方法參數在括號內,并且用逗號分隔。空括號指示方法不需要任何參數。此類包含三種方法:
```
abstract class Motorcycle
{
// Anyone can call this.
public void StartEngine() {/* Method statements here */ }
// Only derived classes can call this.
protected void AddGas(int gallons) { /* Method statements here */ }
// Derived classes can override the base class implementation.
public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; }
// Derived classes must implement this.
public abstract double GetTopSpeed();
}
```
## 方法訪問
調用對象上的方法就像訪問字段。在對象名之后添加一個句點、方法名和括號。參數列在括號里,并且用逗號分隔。因此,可在以下示例中調用 Motorcycle 類的方法:
```
class TestMotorcycle : Motorcycle
{
public override double GetTopSpeed()
{
return 108.4;
}
static void Main()
{
TestMotorcycle moto = new TestMotorcycle();
moto.StartEngine();
moto.AddGas(15);
moto.Drive(5, 20);
double speed = moto.GetTopSpeed();
Console.WriteLine("My top speed is {0}", speed);
}
}
```
## 方法參數與參數
該方法定義指定任何所需參數的名稱和類型。調用代碼調用該方法時,它為每個參數提供了稱為參數的具體值。參數必須與參數類型兼容,但調用代碼中使用的參數名(如果有)不需要與方法中定義的參數名相同。例如:
```
public void Caller()
{
int numA = 4;
// Call with an int variable.
int productA = Square(numA);
int numB = 32;
// Call with another int variable.
int productB = Square(numB);
// Call with an integer literal.
int productC = Square(12);
// Call with an expression that evaulates to int.
productC = Square(productA * 3);
}
int Square(int i)
{
// Store input argument in a local variable.
int input = i;
return input * input;
}
```
## 按引用傳遞與按值傳遞
默認情況下,值類型傳遞給方法時,傳遞的是副本而不是對象本身。因此,對參數的更改不會影響調用方法中的原始副本。可以使用 ref 關鍵字按引用傳遞值類型。有關詳細信息,請參閱[傳遞值類型參數(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/9t0za5es.aspx)。有關內置值類型的列表,請參閱[值類型表(C# 參考)](https://msdn.microsoft.com/zh-CN/library/bfft1t3c.aspx)。
引用類型的對象傳遞到方法中時,將傳遞對對象的引用。也就是說,該方法接收的不是對象本身,而是指示該對象位置的參數。如果通過使用此引用更改對象的成員,即使是按值傳遞該對象,此更改也會反映在調用方法的參數中。
通過使用 **class** 關鍵字創建引用類型,如以下示例所示。
```
public class SampleRefType
{
public int value;
}
```
現在,如果將基于此類型的對象傳遞到方法,則將傳遞對對象的引用。下面的示例將 SampleRefType 類型的對象傳遞到 ModifyObject 方法。
```
public static void TestRefType()
{
SampleRefType rt = new SampleRefType();
rt.value = 44;
ModifyObject(rt);
Console.WriteLine(rt.value);
}
static void ModifyObject(SampleRefType obj)
{
obj.value = 33;
}
```
該示例執行的內容實質上與先前示例相同,均按值將參數傳遞到方法。但是因為使用了引用類型,結果有所不同。 ModifyObject 中所做的對形參 obj 的 value 字段的修改,也會更改 TestRefType 方法中實參 rt 的 value 字段。 TestRefType 方法顯示 33 作為輸出。
有關如何按引用和按值傳遞引用類型的詳細信息,請參閱[傳遞引用類型參數(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/s6938f28.aspx)和[引用類型(C# 參考)](https://msdn.microsoft.com/zh-CN/library/490f96s2.aspx)。
## 返回值
方法可以將值返回到調用方。如果列在方法名之前的返回類型不是 **void**,則該方法可通過使用 **return** 關鍵字返回值。帶 **return** 關鍵字,后跟與返回類型匹配的值的語句將該值返回到方法調用方。 **return** 關鍵字還會停止執行該方法。如果返回類型為 **void**,沒有值的 **return** 語句仍可用于停止執行該方法。沒有 **return** 關鍵字,當方法到達代碼塊結尾時,將停止執行。具有非空的返回類型的方法都需要使用 **return** 關鍵字來返回值。例如,這兩種方法都使用 **return** 關鍵字來返回整數:
```
class SimpleMath
{
public int AddTwoNumbers(int number1, int number2)
{
return number1 + number2;
}
public int SquareANumber(int number)
{
return number * number;
}
}
```
若要使用從方法返回的值,調用方法可以在相同類型的值足夠的地方使用該方法調用本身。也可以將返回值分配給變量。例如,以下兩個代碼示例實現了相同的目標:
```
int result = obj.AddTwoNumbers(1, 2);
result = obj.SquareANumber(result);
// The result is 9.
Console.WriteLine(result);
```
```
result = obj.SquareANumber(obj.AddTwoNumbers(1, 2));
// The result is 9.
Console.WriteLine(result);
```
在這種情況下,使用本地變量 result 存儲值是可選的。此步驟可以幫助提高代碼的可讀性,或者如果需要存儲該方法整個范圍內參數的原始值,則此步驟可能很有必要。
有關詳細信息,請參閱[return(C# 參考)](https://msdn.microsoft.com/zh-CN/library/1h3swy84.aspx)。
## 異步方法
通過使用異步功能,你可以調用異步方法而無需使用顯式回調,也不需要跨多個方法或 lambda 表達式來手動拆分代碼。Visual Studio 2012 中已引入異步功能。
如果用 [async](https://msdn.microsoft.com/zh-CN/library/hh156513.aspx) 修飾符標記方法,則可以使用該方法中的 [await](https://msdn.microsoft.com/zh-CN/library/hh156528.aspx) 運算符。當控件到達異步方法中的 await 表達式時,控件將返回到調用方,并在等待任務完成前,方法中進度將一直處于掛起狀態。任務完成后,可以在方法中恢復執行。
|  注意 |
| :-- |
| 異步方法在遇到第一個尚未完成的 awaited 對象或到達異步方法的末尾時(以先發生者為準),將返回到調用方。 |
異步方法可以具有 [Task<TResult>](https://msdn.microsoft.com/zh-CN/library/dd321424.aspx)、[Task](https://msdn.microsoft.com/zh-CN/library/system.threading.tasks.task.aspx) 或 void 返回類型。Void 返回類型主要用于定義需要 void 返回類型的事件處理程序。無法等待返回 void 的異步方法,并且返回 void 方法的調用方無法捕獲該方法引發的異常。
在以下示例中,DelayAsync 是具有 [Task<TResult>](https://msdn.microsoft.com/zh-CN/library/dd321424.aspx) 返回類型的異步方法。 DelayAsync 具有返回整數的 **return** 語句。因此,DelayAsync 的方法聲明必須具有 **Task<int>** 的返回類型。因為返回類型是 **Task<int>**,DoSomethingAsync 中 **await** 表達式的計算如以下語句所示得出整數:int result = await delayTask。
startButton_Click 方法是具有 void 返回類型的異步方法的示例。因為 DoSomethingAsync 是異步方法,調用 DoSomethingAsync 的任務必須等待,如以下語句所示:await DoSomethingAsync();。 startButton_Click 方法必須使用 **async** 修飾符進行定義,因為該方法具有 **await** 表達式。
```
// using System.Diagnostics;
// using System.Threading.Tasks;
// This Click event is marked with the async modifier.
private async void startButton_Click(object sender, RoutedEventArgs e)
{
await DoSomethingAsync();
}
private async Task DoSomethingAsync()
{
Task<int> delayTask = DelayAsync();
int result = await delayTask;
// The previous two statements may be combined into
// the following statement.
//int result = await DelayAsync();
Debug.WriteLine("Result: " + result);
}
private async Task<int> DelayAsync()
{
await Task.Delay(100);
return 5;
}
// Output:
// Result: 5
```
異步方法不能聲明任何 [ref](https://msdn.microsoft.com/zh-CN/library/14akc2c7.aspx) 或 [out](https://msdn.microsoft.com/zh-CN/library/t3c3bfhx.aspx) 參數,但是可以調用具有這類參數的方法。
有關異步方法的詳細信息,請參閱[使用 Async 和 Await 的異步編程(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/hh191443.aspx)、[異步程序中的控制流(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/hh873191.aspx)和[異步返回類型(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/hh524395.aspx)。
## 表達式主體定義
具有立即僅返回表達式結果,或單個語句作為方法主題的方法定義很常見。以下是使用 **=>** 定義此類方法的語法快捷方式:
```
public Point Move(int dx, int dy) => new Point(x + dx, y + dy);
public void Print() => Console.WriteLine(First + " " + Last);
// Works with operators, properties, and indexers too.
public static Complex operator +(Complex a, Complex b) => a.Add(b);
public string Name => First + " " + Last;
public Customer this[long id] => store.LookupCustomer(id);
```
如果該方法返回 **void** 或是異步方法,則該方法的主體必須是語句表達式(與 lambda 相同)。對于屬性和索引器,兩者必須是只讀,并且不使用 **get** 訪問器關鍵字。
## 迭代器
迭代器對集合執行自定義迭代,如列表或數組。迭代器使用 [yield return](https://msdn.microsoft.com/zh-CN/library/9k7k7cf0.aspx) 語句返回元素,每次返回一個。當 [yield return](https://msdn.microsoft.com/zh-CN/library/9k7k7cf0.aspx) 語句到達時,將記住當前在代碼中的位置。下次調用迭代器時,將從該位置重新開始執行。
通過使用 [foreach](https://msdn.microsoft.com/zh-CN/library/ttw7t8t6.aspx) 語句從客戶端代碼調用迭代器。
迭代器的返回類型可以是 [IEnumerable](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerable.aspx)、[IEnumerable<T>](https://msdn.microsoft.com/zh-CN/library/9eekhta0.aspx)、[IEnumerator](https://msdn.microsoft.com/zh-CN/library/system.collections.ienumerator.aspx) 或 [IEnumerator<T>](https://msdn.microsoft.com/zh-CN/library/78dfe2yb.aspx)。
有關詳細信息,請參閱[迭代器(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dscyy5s0.aspx)。
## C# 語言規范
有關詳細信息,請參閱 [C# 語言規范](https://msdn.microsoft.com/zh-CN/library/ms228593.aspx)。該語言規范是 C# 語法和用法的權威資料。
## 請參閱
[C# 編程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx)
[類和結構(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/ms173109.aspx)
[訪問修飾符(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/ms173121.aspx)
[靜態類和靜態類成員(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/79b3xss3.aspx)
[繼承(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/ms173149.aspx)
[抽象類、密封類及類成員(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/ms173150.aspx)
[params(C# 參考)](https://msdn.microsoft.com/zh-CN/library/w5zay9db.aspx)
[return(C# 參考)](https://msdn.microsoft.com/zh-CN/library/1h3swy84.aspx)
[out(C# 參考)](https://msdn.microsoft.com/zh-CN/library/t3c3bfhx.aspx)
[ref(C# 參考)](https://msdn.microsoft.com/zh-CN/library/14akc2c7.aspx)
[傳遞參數(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/0f66670z.aspx)
- C# 編程指南
- 在 C# 程序內部
- Hello World -- 您的第一個程序(C# 編程指南)
- C# 程序的通用結構(C# 編程指南)
- C# 編碼約定(C# 編程指南)
- 數組(C# 編程指南)
- 作為對象的數組(C# 編程指南)
- 一維數組(C# 編程指南)
- 多維數組(C# 編程指南)
- 交錯數組(C# 編程指南)
- 對數組使用 foreach(C# 編程指南)
- 將數組作為參數傳遞(C# 編程指南)
- 使用 ref 和 out 傳遞數組(C# 編程指南)
- 隱式類型的數組(C# 編程指南)
- 類和結構(C# 編程指南)
- 類(C# 編程指南)
- 對象(C# 編程指南)
- 結構(C# 編程指南)
- 繼承(C# 編程指南)
- 多態性(C# 編程指南)
- 抽象類、密封類及類成員(C# 編程指南)
- 靜態類和靜態類成員(C# 編程指南)
- 成員(C# 編程指南)
- 訪問修飾符(C# 編程指南)
- 字段(C# 編程指南)
- 常量(C# 編程指南)
- 屬性(C# 編程指南)
- 方法(C# 編程指南)
- 構造函數(C# 編程指南)
- 析構函數(C# 編程指南)
- 對象和集合初始值設定項(C# 編程指南)
- 如何:使用 foreach 訪問集合類(C# 編程指南)
- 嵌套類型(C# 編程指南)
- 分部類和方法(C# 編程指南)
- 匿名類型(C# 編程指南)
- 委托(C# 編程指南)
- 使用委托(C# 編程指南)
- 帶有命名方法的委托與帶有匿名方法的委托(C# 編程指南)
- 如何:合并委托(多路廣播委托)(C# 編程指南)
- 如何:聲明、實例化和使用委托(C# 編程指南)
- 枚舉類型(C# 編程指南)
- 事件(C# 編程指南)
- 如何:訂閱和取消訂閱事件(C# 編程指南)
- 如何:發布符合 .NET Framework 準則的事件(C# 編程指南)
- 如何:在派生類中引發基類事件(C# 編程指南)
- 如何:實現接口事件(C# 編程指南)
- 如何:使用字典存儲事件實例(C# 編程指南)
- 如何:實現自定義事件訪問器(C# 編程指南)
- 異常和異常處理(C# 編程指南)
- 使用異常(C# 編程指南)
- 異常處理(C# 編程指南)
- 創建和引發異常(C# 編程指南)
- 編譯器生成的異常(C# 編程指南)
- 如何:使用 try/catch 處理異常(C# 編程指南)
- 如何:使用 finally 執行清理代碼(C# 編程指南)
- 如何:捕捉非 CLS 異常
- 文件系統和注冊表(C# 編程指南)
- 如何:循環訪問目錄樹(C# 編程指南)
- 如何:獲取有關文件、文件夾和驅動器的信息(C# 編程指南)
- 如何:創建文件或文件夾(C# 編程指南)
- 如何:復制、刪除和移動文件和文件夾(C# 編程指南)
- 如何:提供文件操作進度對話框(C# 編程指南)
- 如何:寫入文本文件(C# 編程指南)
- 如何:讀取文本文件中的內容(C# 編程指南)
- 如何:一次一行地讀取文本文件 (Visual C#)
- 如何:在注冊表中創建注冊表項 (Visual C#)
- 泛型(C# 編程指南)
- 泛型介紹(C# 編程指南)
- 泛型的優點(C# 編程指南)
- 泛型類型參數(C# 編程指南)
- 類型參數的約束(C# 編程指南)
- 泛型類(C# 編程指南)
- 泛型接口(C# 編程指南)
- 泛型方法(C# 編程指南)
- 泛型和數組(C# 編程指南)
- 泛型委托(C# 編程指南)
- 泛型代碼中的默認關鍵字(C# 編程指南)
- C++ 模板和 C# 泛型之間的區別(C# 編程指南)
- 運行時中的泛型(C# 編程指南)
- .NET Framework 類庫中的泛型(C# 編程指南)
- 泛型和反射(C# 編程指南)
- 泛型和特性(C# 編程指南)
- 索引器(C# 編程指南)
- 使用索引器(C# 編程指南)
- 接口中的索引器(C# 編程指南)
- 屬性和索引器之間的比較(C# 編程指南)
- 接口(C# 編程指南)
- 顯式接口實現(C# 編程指南)
- 如何:顯式實現接口成員(C# 編程指南)
- 如何:顯式實現兩個接口的成員(C# 編程指南)
- 互操作性(C# 編程指南)
- 互操作性概述(C# 編程指南)
- 如何:通過使用 Visual C# 功能訪問 Office 互操作對象(C# 編程指南)
- 如何:在 COM 互操作編程中使用索引屬性(C# 編程指南)
- 如何:使用平臺調用播放波形文件(C# 編程指南)
- 演練:Office 編程(C# 和 Visual Basic)
- COM 類示例(C# 編程指南)
- LINQ 查詢表達式(C# 編程指南)
- 查詢表達式基礎(C# 編程指南)
- 如何:在 C# 中編寫 LINQ 查詢
- 如何:查詢對象集合(C# 編程指南)
- 如何:從方法中返回查詢(C# 編程指南)
- 如何:在內存中存儲查詢結果(C# 編程指南)
- 如何:對查詢結果進行分組(C# 編程指南)
- 如何:創建嵌套組(C# 編程指南)
- 如何:對分組操作執行子查詢(C# 編程指南)
- 如何:按連續鍵對結果進行分組(C# 編程指南)
- 如何:在運行時動態指定謂詞篩選器(C# 編程指南)
- 如何:執行內部聯接(C# 編程指南)
- 如何:執行分組聯接(C# 編程指南)
- 如何:執行左外部聯接(C# 編程指南)
- 如何:對 Join 子句的結果進行排序(C# 編程指南)
- 如何:使用復合鍵進行聯接(C# 編程指南)
- 如何:執行自定義聯接操作(C# 編程指南)
- 如何:在查詢表達式中處理 Null 值(C# 編程指南)
- 如何:在查詢表達式中處理異常(C# 編程指南)
- Main() 和命令行參數(C# 編程指南)
- 命令行參數(C# 編程指南)
- 如何:顯示命令行參數(C# 編程指南)
- 如何:使用 foreach 訪問命令行參數(C# 編程指南)
- Main() 返回值(C# 編程指南)
- 命名空間(C# 編程指南)
- 使用命名空間(C# 編程指南)
- 如何:使用全局命名空間別名(C# 編程指南)
- 如何:使用 My 命名空間(C# 編程指南)
- 可以為 null 的類型(C# 編程指南)
- 使用可以為 null 的類型(C# 編程指南)
- 裝箱可以為 null 的類型(C# 編程指南)
- 如何:標識可以為 null 的類型(C# 編程指南)
- 如何:安全地將 bool? 強制轉換為 bool(C# 編程指南)
- 語句、表達式和運算符(C# 編程指南)
- 語句(C# 編程指南)
- 表達式(C# 編程指南)
- 運算符(C# 編程指南)
- 匿名函數(C# 編程指南)
- 可重載運算符(C# 編程指南)
- 轉換運算符(C# 編程指南)
- 如何:使用運算符重載創建復數類(C# 編程指南)
- 相等比較(C# 編程指南)
- 字符串(C# 編程指南)
- 如何:串聯多個字符串(C# 編程指南)
- 如何:修改字符串內容(C# 編程指南)
- 如何:比較字符串(C# 編程指南)
- 如何:拆分字符串(C# 編程指南)
- 如何:使用字符串方法搜索字符串(C# 編程指南)
- 如何:使用正則表達式搜索字符串(C# 編程指南)
- 如何:確定字符串是否表示數值(C# 編程指南)
- 如何:將字符串轉換為 DateTime(C# 編程指南)
- 如何:在舊式編碼與 Unicode 之間轉換(C# 編程指南)
- 如何:將 RTF 轉換為純文本(C# 編程指南)
- 類型(C# 編程指南)
- 強制轉換和類型轉換(C# 編程指南)
- 裝箱和取消裝箱(C# 編程指南)
- 使用類型 dynamic(C# 編程指南)
- 如何:使用 as 和 is 運算符安全地進行強制轉換(C# 編程指南)
- 如何:將字節數組轉換為 int(C# 編程指南)
- 如何:將字符串轉換為數字(C# 編程指南)
- 如何:在十六進制字符串與數值類型之間轉換(C# 編程指南)
- 不安全代碼和指針(C# 編程指南)
- 固定大小的緩沖區(C# 編程指南)
- 指針類型(C# 編程指南)
- XML 文檔注釋(C# 編程指南)
- 建議的文檔注釋標記(C# 編程指南)
- 處理 XML 文件(C# 編程指南)
- 文檔標記的分隔符(C# 編程指南)
- 如何:使用 XML 文檔功能(C# 編程指南)
- C# 參考
- C# 關鍵字
- 類型(C# 參考)
- 值類型(C# 參考)
- bool(C# 參考)
- byte(C# 參考)
- char(C# 參考)
- decimal(C# 參考)
- double(C# 參考)
- enum(C# 參考)
- float(C# 參考)
- int(C# 參考)
- long(C# 參考)
- sbyte(C# 參考)
- short(C# 參考)
- struct(C# 參考)
- uint(C# 參考)
- ulong(C# 參考)
- ushort(C# 參考)
- 引用類型(C# 參考)
- class(C# 參考)
- 委托(C# 參考)
- dynamic(C# 參考)
- 接口(C# 參考)
- object(C# 參考)
- string(C# 參考)
- 內插字符串(C# 和 Visual Basic 引用)
- void(C# 參考)
- var(C# 參考)
- 類型參考表(C# 參考)
- 內置類型表(C# 參考)
- 整型表(C# 參考)
- 浮點型表(C# 參考)
- 默認值表(C# 參考)
- 值類型表(C# 參考)
- 隱式數值轉換表(C# 參考)
- 顯式數值轉換表(C# 參考)
- 設置數值結果表的格式(C# 參考)
- 修飾符(C# 參考)
- 訪問修飾符(C# 參考)
- 可訪問性級別(C# 參考)
- 可訪問域(C# 參考)
- 可訪問性級別的使用限制(C# 參考)
- internal(C# 參考)
- private(C# 參考)
- protected(C# 參考)
- public(C# 參考)
- abstract(C# 參考)
- async(C# 參考)
- const(C# 參考)
- event(C# 參考)
- extern(C# 參考)
- in(泛型修飾符)(C# 參考)
- out(泛型修飾符)(C# 參考)
- override(C# 參考)
- readonly(C# 參考)
- sealed(C# 參考)
- static(C# 參考)
- unsafe(C# 參考)
- virtual(C# 參考)
- volatile(C# 參考)
- 語句關鍵字(C# 參考)
- 選擇語句(C# 參考)
- if-else(C# 參考)
- switch(C# 參考)
- 迭代語句(C# 參考)
- do(C# 參考)
- for(C# 參考)
- foreach,in(C# 參考)
- while(C# 參考)
- 跳轉語句(C# 參考)
- break(C# 參考)
- continue(C# 參考)
- goto(C# 參考)
- return(C# 參考)
- 異常處理語句(C# 參考)
- throw(C# 參考)
- try-catch(C# 參考)
- try-finally(C# 參考)
- try-catch-finally(C# 參考)
- Checked 和 Unchecked(C# 參考)
- checked(C# 參考)
- unchecked(C# 參考)
- fixed 語句(C# 參考)
- “鎖定”語句(C# 參考)
- 方法參數(C# 參考)
- params(C# 參考)
- ref(C# 參考)
- out(C# 參考)
- out 參數修飾符(C# 參考)
- 命名空間關鍵字(C# 參考)
- 命名空間(C# 參考)
- using(C# 參考)
- using 指令(C# 參考)
- using 語句(C# 參考)
- 外部別名(C# 參考)
- 運算符關鍵字(C# 參考)
- as(C# 參考)
- await(C# 參考)
- is(C# 參考)
- new(C# 參考)
- new 運算符(C# 參考)
- new 修飾符(C# 參考)
- new 約束(C# 參考)
- sizeof(C# 參考)
- typeof(C# 參考)
- true(C# 參考)
- true 運算符(C# 參考)
- true 字面常數(C# 參考)
- false(C# 參考)
- false 運算符(C# 參考)
- false 字面常數(C# 參考)
- stackalloc(C# 參考)
- nameof(C# 和 Visual Basic 引用)
- 轉換關鍵字(C# 參考)
- explicit(C# 參考)
- implicit(C# 參考)
- 運算符(C# 參考)
- 訪問關鍵字(C# 參考)
- base(C# 參考)
- this(C# 參考)
- 文字關鍵字(C# 參考)
- null(C# 參考)
- default(C# 參考)
- 上下文關鍵字(C# 參考)
- add(C# 參考)
- get(C# 參考)
- global(C# 參考)
- 分部(類型)(C# 參考)
- 分部(方法)(C# 參考)
- remove(C# 參考)
- set(C# 參考)
- where(泛型類型約束)(C# 參考)
- value(C# 參考)
- yield(C# 參考)
- 查詢關鍵字(C# 參考)
- from 子句(C# 參考)
- where 子句(C# 參考)
- select 子句(C# 參考)
- group 子句(C# 參考)
- into(C# 參考)
- orderby 子句(C# 參考)
- join 子句(C# 參考)
- let 子句(C# 參考)
- ascending(C# 參考)
- descending(C# 參考)
- on(C# 參考)
- equals(C# 參考)
- by(C# 參考)
- in(C# 參考)
- C# 運算符
- 運算符(C# 參考)
- () 運算符(C# 參考)
- . 運算符(C# 參考)
- :: 運算符(C# 參考)
- + 運算符(C# 參考)
- - 運算符(C# 參考)
- * 運算符(C# 參考)
- / 運算符(C# 參考)
- % 運算符(C# 參考)
- & 運算符(C# 參考)
- | 運算符(C# 參考)
- ^ 運算符(C# 參考)
- ! 運算符(C# 參考)
- ~ 運算符(C# 參考)
- = 運算符(C# 參考)
- &lt; 運算符(C# 參考)
- &gt; 運算符(C# 參考)
- ?: 運算符(C# 參考)
- ++ 運算符(C# 參考)
- -- 運算符(C# 參考)
- && 運算符(C# 參考)
- || 運算符(C# 參考)
- &lt;&lt; 運算符(C# 參考)
- &gt;&gt; 運算符(C# 參考)
- == 運算符(C# 參考)
- != 運算符(C# 參考)
- &lt;= 運算符(C# 參考)
- &gt;= 運算符(C# 參考)
- += 運算符(C# 參考)
- -= 運算符(C# 參考)
- *= 運算符(C# 參考)
- /= 運算符(C# 參考)
- %= 運算符(C# 參考)
- &= 運算符(C# 參考)
- |= 運算符(C# 參考)
- ^= 運算符(C# 參考)
- &lt;&lt;= 運算符(C# 參考)
- &gt;&gt;= 運算符(C# 參考)
- -&gt; 運算符(C# 參考)
- ?? 運算符(C# 參考)
- =&gt; 運算符(C# 參考)
- NULL 條件運算符(C# 和 Visual Basic)
- C# 預處理器指令
- #if(C# 參考)
- #else(C# 參考)
- #elif(C# 參考)
- #endif(C# 參考)
- #define(C# 參考)
- #undef(C# 參考)
- #warning(C# 參考)
- #error(C# 參考)
- #line(C# 參考)
- #region(C# 參考)
- #endregion(C# 參考)
- #pragma(C# 參考)
- #pragma warning(C# 參考)
- #pragma checksum(C# 參考)
- C# Compiler Options
- Command-line Building With csc.exe
- How to: Set Environment Variables for the Visual Studio Command Line
- Deployment of C# Applications
- C# Compiler Options Listed by Category
- C# Compiler Options Listed Alphabetically
- @ (C# Compiler Options)
- /addmodule (C# Compiler Options)
- /appconfig (C# Compiler Options)
- /baseaddress (C# Compiler Options)
- /bugreport (C# Compiler Options)
- /checked (C# Compiler Options)
- /codepage (C# Compiler Options)
- /debug (C# Compiler Options)
- /define (C# Compiler Options)
- /delaysign (C# Compiler Options)
- /doc (C# Compiler Options)
- /errorreport (C# Compiler Options)
- /filealign (C# Compiler Options)
- /fullpaths (C# Compiler Options)
- /help, /? (C# Compiler Options)
- /highentropyva (C# Compiler Options)
- /keycontainer (C# Compiler Options)
- /keyfile (C# Compiler Options)
- /langversion (C# Compiler Options)
- /lib (C# Compiler Options)
- /link (C# Compiler Options)
- /linkresource (C# Compiler Options)
- /main (C# Compiler Options)
- /moduleassemblyname (C# Compiler Option)
- /noconfig (C# Compiler Options)
- /nologo (C# Compiler Options)
- /nostdlib (C# Compiler Options)
- /nowarn (C# Compiler Options)
- /nowin32manifest (C# Compiler Options)
- /optimize (C# Compiler Options)
- /out (C# Compiler Options)
- /pdb (C# Compiler Options)
- /platform (C# Compiler Options)
- /preferreduilang (C# Compiler Options)
- /recurse (C# Compiler Options)
- /reference (C# Compiler Options)
- /resource (C# Compiler Options)
- /subsystemversion (C# Compiler Options)
- /target (C# Compiler Options)
- /target:appcontainerexe(C# 編譯器選項)
- /target:exe (C# Compiler Options)
- /target:library (C# Compiler Options)
- /target:module (C# Compiler Options)
- /target:winexe (C# Compiler Options)
- /target:winmdobj(C# 編譯器選項)
- /unsafe (C# Compiler Options)
- /utf8output (C# Compiler Options)
- /warn (C# Compiler Options)
- /warnaserror (C# Compiler Options)
- /win32icon (C# Compiler Options)
- /win32manifest (C# Compiler Options)
- /win32res (C# Compiler Options)
- C# Compiler Errors
- Compiler Error CS0001
- Compiler Error CS0006
- Compiler Error CS0007
- 編譯器錯誤 CS0015
- Compiler Error CS0016
- Compiler Error CS0019
- Compiler Error CS0029
- Compiler Error CS0034
- Compiler Error CS0038
- Compiler Error CS0039
- Compiler Error CS0050
- Compiler Error CS0051
- Compiler Error CS0052
- Compiler Error CS0071
- Compiler Error CS0103
- Compiler Error CS0106
- Compiler Error CS0115
- Compiler Error CS0116
- Compiler Error CS0120
- Compiler Error CS0122
- Compiler Error CS0134
- Compiler Error CS0151
- 編譯器錯誤 CS0163
- Compiler Error CS0165
- Compiler Error CS0173
- Compiler Error CS0178
- Compiler Error CS0188
- Compiler Error CS0201
- Compiler Error CS0229
- Compiler Error CS0233
- Compiler Error CS0234
- Compiler Error CS0246
- Compiler Error CS0260
- Compiler Error CS0266
- Compiler Error CS0269
- Compiler Error CS0270
- Compiler Error CS0304
- Compiler Error CS0310
- Compiler Error CS0311
- Compiler Error CS0413
- Compiler Error CS0417
- Compiler Error CS0433
- Compiler Error CS0445
- Compiler Error CS0446
- Compiler Error CS0504
- 編譯器錯誤 CS0507
- Compiler Error CS0518
- Compiler Error CS0523
- Compiler Error CS0545
- Compiler Error CS0552
- Compiler Error CS0563
- Compiler Error CS0570
- Compiler Error CS0571
- Compiler Error CS0579
- Compiler Error CS0592
- Compiler Error CS0616
- Compiler Error CS0650
- Compiler Error CS0686
- Compiler Error CS0702
- 編譯器錯誤 CS0703
- Compiler Error CS0731
- Compiler Error CS0826
- Compiler Error CS0834
- Compiler Error CS0840
- 編譯器錯誤 CS0843
- Compiler Error CS0845
- Compiler Error CS1001
- Compiler Error CS1009
- Compiler Error CS1018
- Compiler Error CS1019
- Compiler Error CS1026
- Compiler Error CS1029
- Compiler Error CS1061
- Compiler Error CS1112
- 編譯器錯誤 CS1501
- Compiler Error CS1502
- Compiler Error CS1519
- Compiler Error CS1540
- Compiler Error CS1546
- Compiler Error CS1548
- Compiler Error CS1564
- Compiler Error CS1567
- Compiler Error CS1579
- Compiler Error CS1612
- Compiler Error CS1614
- Compiler Error CS1640
- Compiler Error CS1644
- Compiler Error CS1656
- Compiler Error CS1674
- Compiler Error CS1703
- Compiler Error CS1704
- Compiler Error CS1705
- Compiler Error CS1708
- Compiler Error CS1716
- 編譯器錯誤 CS1721
- Compiler Error CS1726
- Compiler Error CS1729
- Compiler Error CS1919
- Compiler Error CS1921
- Compiler Error CS1926
- Compiler Error CS1933
- Compiler Error CS1936
- Compiler Error CS1941
- Compiler Error CS1942
- Compiler Error CS1943
- Compiler Error CS1946
- 編譯器錯誤 CS2032
- Compiler Warning (level 1) CS0420
- Compiler Warning (level 1) CS0465
- Compiler Warning (level 1) CS1058
- Compiler Warning (level 1) CS1060
- Compiler Warning (level 1) CS1598
- Compiler Warning (level 1) CS1607
- Compiler Warning (level 1) CS1616
- Compiler Warning (level 1) CS1658
- Compiler Warning (level 1) CS1683
- Compiler Warning (level 1) CS1685
- Compiler Warning (level 1) CS1690
- Compiler Warning (level 1) CS1691
- Compiler Warning (level 1) CS1699
- Compiler Warning (level 1) CS1762
- Compiler Warning (level 1) CS1956
- Compiler Warning (level 1) CS3003
- Compiler Warning (level 1) CS3007
- Compiler Warning (level 1) CS3009
- 編譯器警告(等級 1)CS4014
- Compiler Warning (level 2) CS0108
- 編譯器警告(等級 2)CS0467
- Compiler Warning (level 2) CS0618
- Compiler Warning (level 2) CS1701
- Compiler Warning (level 3) CS0675
- Compiler Warning (level 3) CS1700
- Compiler Warning (level 4) CS0429
- Compiler Warning (level 4) CS1591
- Compiler Warning (level 4) CS1610
- C# 語言規范