
函数(Function or Method or ...)是程序的主体,栋梁。
经常用到的一个功能:交换两个变量的数据。
默认情况下,这么写:
int a = 10; int b = 20; int tmp = a; a = b; b = tmp;
如果每次遇到,都这么写,是不是有点费事呢?那是。
记住二条基本原则:
(1)只要是重复的事情,就写作函数!
(2)只要是比较长的事情(代码)就分成几个函数!
因而,当然要写个函数来完成这个重复的任务。
那,是不是这么写?
...
public static class Globals
{
public void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
}
...
int a = 10;
int b = 20;
Globals.swap(a, b);
当然,正如你所预料 或 超乎你的预料,这段代码没实现a,b数据交换功能。
最后结果是 a = 10;b = 20;!!!!!
比喻:你和朋友,换了房间,但是没有交换房间钥匙!晚上还得回自己房间睡觉。
交换函数 swap 应该这么写:
public static class Globals
{
public void swap(ref int a,ref int b)
{
int tmp = a;
a = b;
b = tmp;
}
}
区别在于 ref !!!!!
ref = reference ,引用(C/C++里面的指针!)。
用法:
int a = 10; int b = 20; Globals.swap(ref a, ref b);
比喻:你和朋友,交换了房间钥匙,现在在哪个房间不重要了!晚上去另外房间睡觉!
二、旅客的选择敲黑板啦!关键点: 如果参数传入后,修改数据,并且需要传出新的数据(后面要用撒!),则必须使用 ref。
C# 的数据类型很多,是不是都需要 ref 呢?不是的啊!
笔记:
(1)int,double,float,decimal,char,byte,string等等,如果 传入、传出,则需要 ref。
public void func(ref string a, ref string b)
{
// 修改 a, b 的数据;
}
(2)数组、列表、堆、栈等数据集合,不需要。
array 数组
public void func(double[] a, double[] b)
{
// 修改 a, b 的数据;
}
list 列表
public void func(Lista, List b) { // 修改 a, b 的数据; }
(2)Complex, Matrix 等等咱们或朋友定义的扩展类型与 class ,struct ,就不需要 ref。
public void func(Complex a, Complex b)
{
// 修改 a, b 的数据;
}
简单一点:只要不是基本的数据类型,一般(!!)都不需要 ref 。
非基本数据类型,是组合数据,本身暴露给大家的就是房卡而已。
double[] a;是类型,是房卡!
a[0] 是数据;不是房卡!
大家先初步了解一下。
另外还有一个关键字 out ,非常非常像!
以后再专门介绍 out。
哦!还有 in。