在C#高级编程(第七版)写到方法中的参数默认是按照值类型传递的
c#(.net)框架中预定义15个类型其中13个是值类型,另外两个(string && object)是引用类型。
按照上述的结果是如果把string 和 object传递给方法在方法类改变这一值其外部的值会被改变。
测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{
/// <summary>
/// 论证方法的参数是否以引用传递。参数以值类型传递
/// </summary>
class Program
{
static void Main(string[] args)
{
string Test = "I Love You!";
Program TestString = new Program();
TestString.ChangeString(Test);
Console.WriteLine(Test);//I Love You!
int[] ints = { 0, 1, 2, 3 };
TestString.ChangeArray(ints);
Console.WriteLine(ints[0].ToString());
Console.ReadKey();
}
public void ChangeString(string str)
{
str = "I heart you";
}
public void ChangeArray(int[] ints)
{
ints[0] = 100;
}
}
}
在我测试后string的值并没有改变而数组的值改变了。这是为什么。数组和string不一样是引用类型吗?
c#(.net)框架中预定义15个类型其中13个是值类型,另外两个(string && object)是引用类型。
按照上述的结果是如果把string 和 object传递给方法在方法类改变这一值其外部的值会被改变。
测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{
/// <summary>
/// 论证方法的参数是否以引用传递。参数以值类型传递
/// </summary>
class Program
{
static void Main(string[] args)
{
string Test = "I Love You!";
Program TestString = new Program();
TestString.ChangeString(Test);
Console.WriteLine(Test);//I Love You!
int[] ints = { 0, 1, 2, 3 };
TestString.ChangeArray(ints);
Console.WriteLine(ints[0].ToString());
Console.ReadKey();
}
public void ChangeString(string str)
{
str = "I heart you";
}
public void ChangeArray(int[] ints)
{
ints[0] = 100;
}
}
}
在我测试后string的值并没有改变而数组的值改变了。这是为什么。数组和string不一样是引用类型吗?
{
str = "I heart you";
}
调用时:
TestString.ChangeString(ref Test);
这个值就改变的了,但是这只是个参数传过来的,你外面那个实参你确没有改变的,改变的只是形参,如果你在上面直接test=i heart you 那这个肯定是输出是i heart you !
public void ChangeArray(int[] ints)
{
ints = new int[]{100,1,2,3};
}
你试一下这个。
相当于: str = new string("I heart you");
例如 string str="abc";
你无法执行: str[1]='z';
但你可以: char c1=str[1];