[參考:c#說明文件中方法的使用](https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/methods)
# 方法及方法的參數

> 看到 `void` 類似字樣修飾符的,就知道這個是方法了。
類中包括屬性和方法。其實方法就是一個函數,便于在創建對象后直接用“.”調用。方法聲明如下:
```
public int Student() //public 是權限修飾符;int 表示返回值類型。如果是 void 則是無需返回一個值;Student()為自己取的方法名。
{
//方法的主體
return 0;//因為定義為int類型,所以需要加return來回傳返回值。或return “”;
}
```
調用時只需要“對象名.方法名”也就是對象名后面加一個點,就直接可以跳出方法名了。
# params
方法的參數個數不確定時,可使用params[]
params 其實是一個一維數組。
- 一個方法最多有一個 params[] 參數;
- 只能在一維數組上引用;
- 不能使用ref、out修飾 params[] 參數。
```
private int Add(params int[ ] x) // 如果知道參數個數,可寫成private void Add(int i, int j, int k, int m ... )
{
}
Program pro = new Program(); //創建默認空參數的對象
int result1 = pro.Add (20);
int result2 = pro.Add(20, 30, 40, 50);
console.writeline(result1);
console.writeline(result2);
console.readline();
```
```
class Program()
{
int Add(params int[] x) //Add是一個方法的名字,而不是一個數組的名字,所以括號內的x,才是數組的名字,真實寫法應該是:一維數組int x[],所以后續遍歷數組時,寫法應該是int x[i]
{
int result = 0;
for(int i=0; i<x.Length; i++)
{
result += x[i]; //這里不是result += i
}
return result;
}
}
static void Main()
{
Program pro = new Program();
int result = pro.Add(20, 35); // 直接調用即可,無需其他語句。
console.writeline(result);
console.readline();
}
```
# ref 可不先初始化——形參和實參
如:交換兩個數的值
按引用進行傳遞:ref。必須初始化(與局部變量是一樣的)
int num1前面加ref
```
static void Main()
{
int num1 = 98, num2 = 368;
console.writeline("before exchange, the nums are: {0}, {1}", num1, num2 );
Swap(num1, num2);
console.writeline("after enchange, the nums are: {0}, {1}", num1, num2)
console.readline();
}
//以下語句為用于交換兩個數的swap方法
static void Swap(num1, num2)
{
int temp;
temp = num1;
num1 = num2;
num2 = temp;
}
```
上述代碼并不會交換數值,因為swap()括號中的為形式參數。{}中的為實際參數。而對實參的修改并不會影響到形參的結果。所以按上述代碼執行后,交換前后是一樣的。
這時候需要在形參前加ref
```
static void Main()
{
int num1 = 98, num = 368; // 對Swap中的num1,num2 進行初始化
console.writeline("before exchange, the nums are: {0}, {1}", num1, num2);
Swap(ref num1, ref num2); // 記得加 ref
console.writeline("after exchange, the nums are: {0}, {1}", num1, num2);
consoel.readline();
}
static void Swap(ref int num1, ref int num2) // 記得加 ref
{
int temp;
temp = num1;
num1 = num2;
num2 = tepm;
}
```
按值傳遞 vs 按引用傳遞

# out 想返回多個值,或使用未經初始化的變量?
out


```
class Program
{
void Add2 (int a, int b, out int c) //如果此處未寫out,則必須對c賦值
{
c = a+b;
}
static void Main()
{
Program pro2 = new Program();
int a =2, b = 3, out c;
pro.Add2(a, b, out c); //如果直接寫“console.writeline(c)”,則會提示未賦值,此時加入這一行,調用Add方法,并且使用 out 修飾變量,就不會出錯。
console.writeline(c);
console.readline();
}
}
```
也可以返回多個值:
比如想知道面試結果,以及是否被錄用的原因:
```
void Search (int flag, out int result, out string reason)
{
if (flag == 0)
{
result = "錄用";
reason = "技術能力好";
}
else
{
result = "不錄用";
reason = "技術能力不行";
}
}
```
此時傳回的就是多個返回值。
# 方法重載
要調用方法時,如果只是值類型不同,或者值個數不同,無需重新定義多個方法,而可以直接使用相同的方法:
```
class Add1
{
//方法的類型不同
public sring Sum1(string a, string b, string c)
{...}
public int Sum1(int a, int b, int c)
{...}
//這里兩個方法的名字都叫Sum1,同名,即視為重載
}
class Add2
{
//方法的參數個數不同
public int Sum2(int a, int b, int c)
{...}
public int Sum2(int a, int b, int c, int d)
{...}
}
```

# 類的靜態成員
## static
如上述例子,如果在`int Sum(int a, int b, int c)`前加`static`關鍵字,則變成靜態類。
沒加static前,是實例方法,所以在調用的時候需要
`Program pro = new Program() pro.Sum(20, 30, 40)` 來創建對象,并調用方法。
如果把方法創建成靜態的,那就可以直接調用類型的名字來調用
```
class Program
{
static int Sum(int a, int b, int c)
{
...
}
Program pro = new Program();
int result = Program.Sum(20, 30, 50); //此處Program也可以不寫,但不能寫成program.Sum(20, 30, 40),否則提示錯誤
int result = Sum(22, 33, 44); //不寫Program也可以。
}
```

無法使用實例引用來訪問成員。。。請該用類型名來限定它。
- 幫助文檔 microsoft helo viewer
- c#開發環境及visual studio安裝注意事項
- c#程序基本結構-基本語法
- Q1: public static void main(String[] args) 是什么意思
- Q2: c#命名空間+Main方法
- Q3:注釋+命名規則+代碼規則
- Q4: c#語句 system => console
- Q5: 數據類型 .net
- Q5: 常用名字、變量、運算符
- Q6: 對話窗輸入-屬性
- Q7: 遞歸
- Q8:決策分支、條件判斷語句 if 語句
- Q9:數組
- Q10:字符串
- Q11:對象、類、訪問權限、靜態動態函數
- Q12:方法及參數——繼承于類
- Q13:構造函數
- Q14:繼承——base 關鍵字
- Q15:多態、虛方法、接口
- Q16:創建窗體應用、控件
- Q17:Ado數據訪問、連接 sqlserver 數據庫
- Q18: 讀取數據command + DataRead( )、DataSet + DateAdapter
- Q19: Entity Framwork、entity 與 ADO.net的區別
- Q20: 對話框、文件、文件夾
- Q21: 導入excel數據、更新到 dbo 數據庫中
- Q26: 獲取 excel 中每個 sheet 的表名
- Q22: 兩個窗體之間數據+方法傳遞
- Q23: 數學對象
- Q24: c#網站編寫
- Q25: visual studio2017如何查看幫助
- Q27: c# dictionary 字典對象
- Q28: 數組與dataTable互相轉化