您的位置:首页 > 其它

属性和方法调用不允许作为ref或out参数值使用

2012-05-26 21:51 274 查看
C#允许属性像字段那样使用,只是不允许将它们作为ref或out参数值来传递。ref和out参数值在内部实现时,需要将内存地址传给目标方法。但是,由于属性可能是没有支持字段的虚字段,也有可能是只读/只写的,因此不可能传递其基础存储的地址。所以,你不能将属性作为ref或out参数值来传递。同样的道理也适用于方法调用。如果需要将一个属性或者方法调用作为ref或out参数值来传递,首先必须将值复制到一个变量中,然后传递该变量。方法调用结束之后,再将变量的值赋回属性。

public class Classmates

{
public Person[] Students { get; set; }
public Person Master { get; set; }
public int Age { get; set; }
}

static void Main()
{
Classmates class1 = new Classmates();
Person[] Students = new Person[] { new Person() { Name = "Jim" }, new Person() { Name = "Tom" } };
Person master = new Person() { Name = "JuanJuan" };
class1.Students = Students;
class1.Master = master;
class1.Age = 10;
ChangeName(ref class1.Students[0]);
//ChangeAge(ref class1.Age);
//ChangeMasterName(ref class1.Master);

foreach (var student in Students)
{
Console.WriteLine(student.Name);
}
System.Console.ReadKey();
}

static void ChangeName(ref Person p)
{
p = new Person();
p.Name = "New Guy";
}

static void ChangeMasterName(ref Person p)
{
p = new Person();
p.Name = "New Master";
}
static void ChangeAge(ref int Age)
{
Age = 10;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: