方法(函数)

System【命名空间】.Console【类】.Write【方法】()

using A.B.C

  • C# 没有全局这种概念。
  • 动态方法调用动态or静态;
  • 静态方法调用静态。

传值、传引用

static double Average(List<int> nums){
int sum = 0;
foreach(var l in nums){
sum += l;
}
return (double)sum/nums.Count;
} // 类,传引用。

static void Swap(ref int a, ref int b){
int t;
t = a; a = b; b = t;
} // 注意ref,将传值改为传隐用。

  • String和List类等都是引用类型,不是基本类型(int double bool char)需要加上ref才能传引用调用。
  • 底层与指针有关。

out参数

  • out参数是函数返回的另一个返回值。

static void Add(List<int> list, out bool success){
list.Add(2);
success = true;
}
Main(…){…
bool i;
Add(list, out i);
}

重载

static void Swap(ref int a, ref int b){}
static void Swap(ref string a, ref string b){}

泛型(模板)

static void Swap<T>(ref T a, ref T b){}

Swap(ref a, ref b); //可自我推断类型

累加案例(可变参数)

static int Sum(params int[] nums){
return nums.Sum();
}

  • 也可加入模板
  • 可变参数必须为最后一个参数

static T Sum<T>(patams T[] nums){

return …;
}

递归

static long Fib(long n){
if(n == 1 || n == 2) return 1;
return Fib(n-1) + Fib(n-2);
}

案例:理解file和directory

using System.IO
static long FileOrDirCount(string path){
long count = 0;
// 统计file的个数
var files = Directory.GetFiles(path);
count += files.Length;
// 统计directory的个数
var dirs = Directory.GetDirectories(path);
foreach(var dir in dirs){
count += FileOrDirCount(dir);
}
return count;
}

异常

将上文一部分放入try{}中来举例。

try{
// 统计file的个数
var files = Directory.GetFiles(path);
count += files.Length;
// 统计directory的个数
var dirs = Directory.GetDirectories(path);
foreach(var dir in dirs){
count += FileOrDirCount(dir);
}
}catch(UnauthorizedAccessException ex){
Console.WriteLine(ex.Message);
}

  • 错误分为编译时错误和运行时错误。

命名参数和默认(可选)参数

public void MoveAndResize(int x, int y, int width, int height = 100){}

MoveAndResize(x:10,y:20,width:30,height:40);

Main()

参考MSDN。

面向过程部分已经基本结束。