//在结构中定义的函数/* 在结构中不但可以定义数据,还可以包含函数 主要左右是在引用结构的时候会有一些功能代码上的重复,所以在结构定义函数,可以减少我们重复编写引用结构时所需要写的代码 */using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 结构函数{ struct CustomerName { public string firstName; public string lastName; public string getName() { return firstName + " " + lastName; } } struct Vector3 { public float x; public float y; public float z; public double Distance() { return Math.Sqrt(x * x + y * y + z * z); } } class Program { static void Main(string[] args) { CustomerName myName; myName.firstName = "siki"; myName.lastName = "Yang"; Console.WriteLine("My name is {0} {1}.", myName.firstName, myName.lastName); Console.WriteLine("My name is " + myName.getName()); Vector3 myVector3; myVector3.x = 3; myVector3.y = 3; myVector3.z = 3; Console.WriteLine(myVector3.Distance()); Console.ReadKey(); } }}/* 为什么使用函数重载overload 假设我们有一个函数来实现求的一个数组的最大值 这个函数只能处理int数组如果想处理double类型的话需要再定义一个函数 函数名相同,参数不同,这个叫做函数的重载,编译器通过参数去识别该调用那一个函数 */using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 函数的重载{ class Program { static int MaxValue(params int[] array) { Console.WriteLine("int类型的maxvalue被调用"); int maxValue = array[0]; for (int i = 0; i < array.Length; i++) { if (array[i] > maxValue) { maxValue = array[i]; } } return maxValue; } static double MaxValue(params double[] array) { Console.WriteLine("double类型的maxvalue被调用"); double maxValue = array[0]; for (int i = 0; i < array.Length; i++) { if (array[i] > maxValue) { maxValue = array[i]; } } return maxValue; } static void Main(string[] args) { int res = MaxValue(2, 3, 2354); double res2 = MaxValue(1.1, 232.2, 3432.43); Console.WriteLine(res); Console.WriteLine(res2); } }}/* 委托(delegate)是一种存储函数引用的类型。委托的定义指定了一个返回类型和一个参数列表定义了委托之后,就可以声明该委托类型的变量,接着就可以把一个返回类型跟参数列表跟委托一样的函数赋值给这个变量。委托的使用分两步 定义 声明(变量)结构体,枚举的使用同上都分为定义和声明 整数类型,数组类型,字符串类型,都是直接声明变量的,因为类型的定义已经完成了(CLR中已经完成定义)*/using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 委托的定义和声明{ //定义一个委托 类型double 类型名Mydelegate,类型名可以理解为函数名 //委托关键字delegate //委托的定义不需要函数体 public delegate double Mydelegate(double param1, double param2); class Program { static double Multiply(double param1,double param2) { return param1 * param2; } static double Divide(double param1, double param2) { return param1 / param2; } static void Main(string[] args) { Mydelegate de;//利用委托声明一个新的变量 de = Multiply;//委托的变量赋值的时候,返回值跟参数列表必须一致 Console.WriteLine(de(1.0, 2.2)); de = Divide; Console.WriteLine(de(6.0, 2.0)); Console.ReadKey(); } }}using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 函数的递归调用{ class Program { static int F(int n) { if (n == 0) { return 2; } if (n == 1) { return 3; } return F(n - 1) + F(n - 2);//函数调用自身,叫做的递归调用,递归函数一定要设置递归终止条件 } static void Main(string[] args) { int res = F(40); } }}