```csharp
//by value
//int i = 10;
//func1(i);
//Console.WriteLine(i); // 10
//void func1(int j)
//{
// j = 100;
//}
//==================
//by ref
//int i = 10;
//func2(ref i);
//Console.WriteLine(i); // 11
//void func2(ref int j)
//{
// j = j + 1;
//}
//==================
//out
func3(out int i);
Console.WriteLine(i); // 100
void func3(out int j)
{
j = 100;
}
//==================
//tryparse
//string s = "1000";
//int i = int.Parse(s);
//Console.WriteLine(i + 500);
string s = "1000";
int.TryParse(s, out int i);
Console.WriteLine(i + 500);
//==================
//int[] numbers = { 1, 2, 3, 4 };
//func(numbers);
//void func(int[] ar)
//{
// ar[0] = 1000;
//}
//Console.WriteLine(numbers[0]); //1000
//int[] numbers = { 1, 2, 3, 4 };
//func(ref numbers);
//void func(ref int[] ar)
//{
// ar[0] = 1000;
//}
//Console.WriteLine(numbers[0]); //1000
//==================
//int[] numbers = { 1, 2, 3, 4 };
//func(numbers);
//void func(int[] ar)
//{
// ar = new int[] { 100, 200, 300, 400 };
//}
//Console.WriteLine(numbers[0]); //1
int[] numbers = { 1, 2, 3, 4 };
func(ref numbers);
void func(ref int[] ar)
{
ar=new int[] { 100, 200, 300, 400 };
}
Console.WriteLine(numbers[0]); //100
//====================
//optional parameter
Display(1);
Display(1,2);
Display(1,m:3);
void Display(int i, int j = 200, int m = 300)
{
Console.WriteLine((i, j, m));
}
//====================
//param array
Console.WriteLine(Sum(1,3,4,7));
Console.WriteLine(Sum(new int[] {100,200,300}));
int Sum(params int[] numbers)
{
return numbers.Sum();
}
//====================
//return tuple
var result = ParseInt("1000");
Console.WriteLine((result.Item1, result.Item2+500));
var result2 = ParseInt("a1000");
Console.WriteLine((result2.Item1, result2.Item2 + 500));
(bool, int) ParseInt(string s)
{
return (int.TryParse(s,out int i),i);
}
//====================
//deconstructing
var (a,b) = ParseInt("1000");
Console.WriteLine((a, b));
(bool, int) ParseInt(string s)
{
return (int.TryParse(s,out int i),i);
}
//====================
//expression-bodied function
//int result = Add(100, 50);
//Console.WriteLine(result);
//int Add(int i, int j)
//{
// return i + j;
//}
int result = Add(100, 50);
Console.WriteLine(result);
int Add(int i, int j)=> i + j;
//====================
//xml documentation
int result = ComputeArea(100, 200);
Console.WriteLine(result);
/// <summary>
/// 計算面積
/// </summary>
/// <param name="width">寬</param>
/// <param name="height">高</param>
/// <returns>寬高相乘結果</returns>
static int ComputeArea(int width, int height) => width * height;
```