c#中方法的参数有四种类型:
值参数,不含任何修饰符。
引用型参数,以ref修饰符声明。
输出参数,以out修饰符声明。
数组型参数,以params修饰符声明。
实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace shiyan2._0
{
class Person
{
public int age;
public void ChangeAge(ref int age)//ref称为引用参数
{
age = age + 10;
}
public void ChangeWeight(out double d)
{
d = 120;
}
//params表示强调是一个可变的数组
public void ShowInfo(string a,params int[] showages)
{
foreach (int i in showages)
{
Console.WriteLine("年龄:" + i);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace shiyan2._0
{
internal class Program
{
static void Main(string[] args)
{
//ref和out之间的区别,虽然都是引用的原有的数据进行操作。
//使用ref的数据在使用前必须赋值。
//使用out类型的参数可以赋值也可以不赋值。
int myage = 18;
double dweight = 108;
Person p=new Person();
// p.ChangeAge(myage);//值参数传递,它实际是克隆了一个值
p.ChangeAge(ref myage);//ref引用参数。引用原有的参数(原有的数据必须先赋值)
p.ChangeWeight(out dweight);//out参数,引用原有的数据(原有的数据可以不用赋值的)
Console.WriteLine("年龄:" + myage);
Console.WriteLine("体重:" + dweight);
int[] myages = { 12, 13, 14 ,15};
p.ShowInfo("",myages);
}
}
}
带有参数和返回值的方法调用:
比如在定义的GenerateCharacter()方法的参数列表中增加两个参数,一个是string类型的角色名字name,另一个角色的等级int类型的level.
方法的定义就需要修改为
Public void GenerateCharacter(string name ,int level)
{
Debug.LogFormat("Character:{0}-Level:{1}",name,level);
}
在调用函数的地方,我们增加一个局部变量:
Int characterLevel =32;然后调用函数
GenerateCharacter("Spike",characterLevel);
方法定义时的参数 string name,int level,称为形式参数(parameter),这两个参数的作用域在这个“{}”包含的方法体内,是这个方法内的局部变量。
方法调用时传输的两个参数,可以是字面值(literal value),或者变量,这时被称为实际参数(argument).
在上面的基础上,将方法改为带有返回值的方法:
方法的定义中需要将void改为int,然后需要在方法体内带上return的关键字,用它返回一个int类型的数值;
代码修改为:
Public int GenerateCharacter(string name,int level)
{
Debug.LogFormat("Character:{0}-Level:{1}",name,level);
Return level+5;
}
这里return 后面可以跟一个字面值,变量,或者一个表达式,只要返回的是一个int类型的值就可以。在没有返回类型的情况下,在方法体内也可以使用return的关键字,此时直接写上“return”即可,方法体内代码遇到return 的关键字,函数立即返回(即跳出这个函数),不执行 return之后的代码了,常用于分情况讨论的执行语句中。
返回值的获取:可以用一个变量去获取这个返回值,在Start()函数中我们定义一个局部变量
Int nextSkillLevel=GenerateCharacter("Spike",characterLevel);
Debug,Log(nextSkillLevel);
也可以将整个方法调用作为一个实参传给其他方法,比如直接进行打印:
Debug.Log(GenerateCharacter("Faye",characterLevel));