关于函数(一) 一.函数基础 基本概念 函数(方法function),本质是一块具有名称的代码块,函数是封装代码进行重复使用的一种机制。
函数的主要作用 :封装代码;提升代码复用率(少写一点代码);抽象行为
函数写在哪里 1.class语句块中
2.struct(复杂数据类型结构体)语句块中
基本语法 static 返回类型 函数名 (参数类型 参数名,参数类型 参数名,……)
{
函数代码逻辑;
函数代码逻辑;
………….
return 返回值;(如果有返回类型才返回)
}
Ps:1.关于static ,不是必须的,但是在没有学习类和结构体之前,都是必须写的。
2.关于返回类型,引出一个新的关键字 void (表示没有返回值)
3.返回类型可以写任意的变量类型 14中变量类型+复杂数据类型(数组,枚举,结构体,类class)
4.关于函数名,要使用帕斯卡命名法(每一个单词首字母大写)
5.参数表示必须的,可以有0~n个参数,参数类型也可以是任意类型的,多个参数的时候,需要逗号隔开。
6.参数名 驼峰命名法
7.当返回类型不为void时,必须通过新的关键词return返回对应类型的内容。(注意:即使是void也可以选择性使用return)
实际运用 无参无返回值函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 namespace 语法知识 { internal class Program { static void SayHellow () { Console.WriteLine("你好世界" ); return ; } static void Main (string [] args )。 { sayHeollow(); } } }
有参无返回值函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 namespace 语法知识 { internal class Program { static void SayYourName (string name ) { Console.WriteLine("你的名字是:{0}" ,name); } static void Main (string [] args )。 { string str="我的名字" ; SayYouName(str); SayYouName("我的名字" ); } } }
无参有返回值函数 之后的内容就不放在主函数中运用了。
1 2 3 4 5 6 7 8 static string WhatYourName () { return "我的名字" ; } SayYourName(WhatYourName());
有参有返回函数 1 2 3 4 5 6 7 8 static int Sum (int a,int b ) { int c=a+b; return c; } 调用: Console.WriteLine(Sum(2 ,5 ));
有参有多返回值函数(这个和C很不一样!!) 传入两个数,然后计算两个数的和,以及他们俩的平均数,得出结果返回出来。
1 2 3 4 5 6 7 8 9 10 11 static int [] Calc (int a,int b ) { int sum=a+b; int avg =sum/2 ; int arr={sum,avg}; return arr; } int [] arr =Calc(5 ,7 ); Console.WriteLine(arr[0 ]+" " +arr[1 ]);
关于return 即使函数没有返回值,我们也可以使用return。
return可以直接不执行之后的代码,直接返回到函数外部。
1 2 3 4 5 6 static void Speak (string str ) { if (str=="混蛋" ){ return ; } Console.WriteLine(str); }
二.关于ref和out 学习ref和out的原因 它们可以解决在函数内部改变外部传入的内容,里面变了,外面也要变。
eg:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 namespace 语法知识 { internal class Program { static void ChangeArrayValue (int [] arr ) { arr=new int []{10 ,20 ,30 }; } static void Main (string [] args )。 { int a=1 ; int [] arr2={1 ,2 ,3 }; ChangeArrayValue(arr2); Console.WriteLine(arr2[0 ]); } } }
ref和out是为了解决这个问题的(也能解决值类型在函数里面无法修改的状况。)
ref和out的使用 函数参数的修饰符,当传入得到值类型参数在内部修改时,或者引用类型参数在内部重新申明时,外部的值会发生变化。
ref的使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 namespace 语法知识 { internal class Program { static void ChangeValueRef (ref int value ) { value =3 ; } static void Main (string [] args )。 { int a=1 ; ChangeValueRef(ref a); Console.WriteLine(a); } } }
out的使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 namespace 语法知识 { internal class Program { static void ChangeValueRef (out int value ) { value =3 ; } static void Main (string [] args )。 { int a=1 ; ChangeValueRef(out a); Console.WriteLine(a); } } }
二者的使用和声明几乎是一样的,那么二者有什么区别呢?
ref和out的区别 1.ref传入的变量必须初始化,而out不用。
2.out传入的变量必须在内部进行赋值,ref不用。
1 2 3 4 5 6 int a; ChangeValueRef(ref a); ChangeValueRef(out a);