方法(函数)
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。
面向过程部分已经基本结束。