基础才是重中之重~值类型与引用类型作为参数传递的不同表现
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); 结果:
{
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); 结果:
相关文章推荐
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- Java传递基本类型:值传递,对象作为参数:引用传递
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 包装类型作为参数时,是值传递,不是引用传递
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 复习一下基础:'C# 值类型和引用类型 以及作为方法参数的区别'
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- JavaScript高级 面向对象(12)--引用类型值类型作为参数传递的特性
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- JavaSE8基础 String是特殊的引用类型,在函数的参数传递中只能把它当做 值类型来看待
- c#基础语言编程-按值类型和引用类型传递参数
- C# 值类型 引用类型 作为参数传递区别
- 【Java基础】基本类型的包装类作为参数传递是值传递还是引用传递
- c#基础语言编程-按值类型和引用类型传递参数
- 引用类型和值类型作为参数的值是否会传递的浅解
- string类型在参数传递中如何作为引用,如何在函数外修改函数内的string类型