您的位置:首页 > 其它

基础才是重中之重~值类型与引用类型作为参数传递的不同表现

2012-02-01 10:08 471 查看
参数传递根据参数类型分为按值传递和按引用传递,默认情况下都是按值传递的,如果希望按引用传递可以在参数前加ref或者out,今天我们主要说一个按传递中的 值传递和引用类型参数的按值传递。 值类型实例传递的是该值类型实例的一个拷贝,因此被调用方法操作的是属于自己本身的实例拷贝,因此不影响原来调用方法中的实例值。 引用类型传递的是对象的引用地址,在方法内操作对象时,原对象实例也会发生改变(其实方法内与方法外是同一对象)。 具体看代码: class Order
{
public Order()
{
this.User = new User { UserID = -1, UserName = "匿名" };
}
public int price = 10;
public List<OrderDetail> OrderDetail { get; set; }
public User User { get; set; }
}
class User
{
public int UserID { get; set; }
public string UserName { get; set; }
}
class OrderDetail
{
public int ProductID { get; set; }
public string Name { get; set; }
public decimal Cost { get; set; }
}

/// <summary>
/// 引用类型作为参数,传递的是地址,会影响原值
/// </summary>
/// <param name="abf"></param>
private static void RefRef(Order abf)
{
abf.price = 20;
Console.WriteLine(abf.price);
}
/// <summary>
/// string类型作为参数,不会影响原值
/// </summary>
/// <param name="aStr"></param>
static void RefStr(string aStr)
{
aStr = "Changing String";
Console.WriteLine(aStr);
}
/// <summary>
/// 引用类型中的引用类型作为参数,传递的是地址,会影响原值
/// </summary>
/// <param name="order"></param>
static void RefInRef(Order order)
{
order.User.UserName = "zzl";
Console.WriteLine(order.User.UserName);
}
/// <summary>
/// 值类型作为参数,不会影响原值
/// </summary>
/// <param name="i"></param>
private static void RefValue(int i)
{
i = i + 10;
Console.WriteLine(i);
}

//引用类型作为参数传递
Order abf = new Order();
RefRef(abf);
Console.WriteLine(abf.price);
//(string)引用类型作为参数传递
string str = "Old String";
RefStr(str);
Console.WriteLine(str); //引用类型中的引用类型
Order order = new Order();
RefInRef(order);
Console.WriteLine(order.User.UserName); //值类型作为参数传递
int a = 10;
RefValue(a);
Console.WriteLine(a); 结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐