|
关于ref进行引用传递的示例1
使用ref进行引用传递需要注意:传递到 ref 参数的参数必须最先初始化.但是out 的参数在传递之前不需要显式初始化我们明天分析研究out 的参数传递
示例1
using System;
namespace class_3
{
//方法的参数 是调用方法时传递给它的变量,主要分两类。
//(1)传递数据值:直接把变量的数据值传递给方法。
//(2)传递数据地址:把变量的内存地址传递给方法。
//使用ref关键字进行引用传递,ref关键字放在需要传递的变量前面,把一个输出参数的内存地址传递给方法,在方法中对变量做的任何修改也保留下来。
//使用ref方法,可以在调用一个方法时改变多个变量的值,解决了一个方法只能返回一个值的限制
//示例 使用ref关键字进行引用传递
public class student
{
public string name; //姓名
public int age; //年龄
public student(string _name, int _age) //构造函数
{
name = _name;
age = _age;
}
//长大_nSpan岁
//定义了学生类的一个方法,使其长大_nSpan岁,并把长大的后的岁数保存在另一个引用参数_nOutCurrentAge中。
//这时便可以体现引用传递的作用了。在方法调用完毕后,变量_nOutCurrentAge中会保存当前年龄值。
public void Grow(int _nSpan, ref int _nOutCurrentAge)
{
age += _nSpan;
_nOutCurrentAge = age;
}
}
class class1
{
static void Main()
{
student s=new student("张三",25);
int nCurrentAge = 0; //在调用Grow方法之前,需要定义一个变量,并且必须进行初始化,否则会报错
s.Grow(3, ref nCurrentAge);
Console.WriteLine(s.name);
Console.WriteLine(s.age);
}
}
}
思考与回顾
上面的例子中 名字name与年龄age都是公用属性,如果将它们换成私有属性private将如何访问呢?我们可以使用第一天学习的c#方法,或者使用get() set()函数
示例2 使用方法
public class student
{
public string name;//公有属性
private int age;//私有属性
public student(string _name, int _age) //构造函数
{
name = _name;
age = _age;
}
public int aage() //方法
{
return age;
}
public void Grow(int _age1, ref int _age2) //定义方法_age1岁并将增加的岁数保存到_age2
{
age += _age1;
_age2 = this.age;
}
}
class Class2
{
static void Main()
{
student s = new student("小张", 25);
int age2 = 0;
s.Grow(3, ref age2);
Console.WriteLine(s.name);
Console.WriteLine(s.aage()); //s,aage()
}
}
示例2 使用get()与set()
只需要将
public int aage() //方法
{
return age;
}
换成
public int aage
{
get
{
return age;
}
set
{
age = aage;
}
}
学习的过程非常漫长,而且是看的多记的少,记的多会的少,如果我们能在学习新知识的同时复习旧知识,并把曾经学过的应用到新知识中,我相信会加深我们的体会与理解,思考是学习的最佳途径,所以我们不应该墨守成规,应该不断创新不断思考,不断进步... |
|