数组参数:当参数为数组时,就为数组参数.

static int Sum(int[]array) 

{ 

   int sum=0; 

   for(int i=0;i<array.length;i++){ 

  
 sum+=array[i]; 

   } 

   return sum; 

} 



参数数组:参数个数不确定的函数 

static int Plus(params int[]array)//这里定义了一个int参数数组 

{ 

   int sun=0; 

   for(int i=0;i<array.length;i++){ 

  
 sum+=array[i]; 

   } 

   return sum; 

} 

数组参数和参数数组的调用方式不同: 

数组参数:int sum=Sum(new int[]{23,4,5,6}); 

参数数组:int sum=Plus(23,4,5,6); 



结构函数:在结构体定义的函数 

结构体:struct CustomerName{ 

 public string firstName; 

 public string lastName; 

 public string getName() 

        { 

            return firstName+lastName; 

        } 

       } 



static void main(string[] args){ 

 CustomerName myName; 

 myName.firstName="Li" 

 myName.lstName="jiacong" 

 console.WriteLine("my name is"+myName.getName()); 

} 



函数的重载(overload):当函数名相同,参数不同时就为函数的重载,编译器通过不同参数确定调用哪个函数。 



委托(delegate):委托是一种存储函数引用的类型. 

//定义了一个委托,与函数差不多 

//定义委托需要加上detegate关键字 

//委托的定义不需要函数体 

public delegate double MyDelegate(double para1m,double param2); 



函数的递归调用:一个函数调用他自身。 

//f(0)=2,f(1)=3,求f(40). 

 static int F(int n), 

        { 

            if (n == 0) return 2; 

            if (n == 1) return 3; 

            return F(n - 2) + F(n - 1);//运用了函数的递归调用 

        } 



构造函数: 

//定义了一个无参的构造函数 

public Vector3(){ 

     console.writeLine("Vector3这个函数被调用了") 

} 

//定义了一个有参的构造函数 

public Vector3(float a,floatb){ 

     this.a=a; 

     this.b=b;  

}




属性的定义(即get,set方法):
通过属性访问字段的作用:1.可以在设置属性时做一些校验
2.可以设置属性的只读或者只写,即设置为private


匿名类型:创建变量时不去指定类型,这个就是匿名类型.第一次赋值时,该变量的类型就被确定下来,并不能修改。
例如:var var1=34;


堆和栈:程序运行时的内存区域
我们把内存分为堆空间和栈空间
栈空间比较小,但是读取速度快
堆空间比较大,但是读取速度慢
栈的特征:数据只能从栈的顶端插入和删除,把数据放入栈顶为入栈
从栈顶删除数据为出栈。


值类型和引用类型:值类型(整型,bool struct(结构体) char 小数)和引用类型(string ,数组,自定义的类,内置的类).
值类型只需要一段单独的内存,用于存储实际的数据,(单独定义的时候放在栈中)
引用类型需要两段内存:第一段存储实际的数据,他总是位于堆中
第二段是一个引用,指向数据在堆中的存放位置
理    清    楚 引用类型到底引用了堆中的那个实际数据


面向对象的概念-----继承
C#不支持多个类的继承

虚方法(虚函数):把一个基类函数声明为Virtual,就可以在任何派生类中重写(override)该函数。 

//声明为虚方法 

public virtual void Move() 

{ 

     Console.WriteLine("这里是Enemy1的公有的Move方法"); 

} 

//重写该方法 

public override void Move() 

{ 

   Console.WriteLine("这里是Boss的移动方法"); 

}