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不一样是引用类型吗?
12 个解决方案
#1
楼主试试下面写法
public void ChangeString(ref string str)
{
str = "I heart you";
}
调用时:
TestString.ChangeString(ref Test);
#2
你看看你写的那个语句,你那个test=i love you 那你下面传的值也是str=i love you str=i heart you
这个值就改变的了,但是这只是个参数传过来的,你外面那个实参你确没有改变的,改变的只是形参,如果你在上面直接test=i heart you 那这个肯定是输出是i heart you !
这个值就改变的了,但是这只是个参数传过来的,你外面那个实参你确没有改变的,改变的只是形参,如果你在上面直接test=i heart you 那这个肯定是输出是i heart you !
#3
string是引用类型,但比较特殊,难道你看书没有看到?
#4
数组也是形参不是改变了么。
#5
这个我知道。
#6
我知道,但是不知道哪里特殊
#7
你只要这样记住就可以了,string是特殊的引用类型,所以他是例外的,不会被改变
#8
值传递和引用传递
你可以把string的传递 特殊当成值传递
你可以把string的传递 特殊当成值传递
#9
public void ChangeArray(int[] ints)
{
ints = new int[]{100,1,2,3};
}
你试一下这个。。。。
#10
str = "I heart you";
相当于: str = new string("I heart you");
相当于: str = new string("I heart you");
#11
string 是一个特殊的类型在于,string 一旦创建,不能再修改里面的值,要改变,只能从新创建。
例如 string str="abc";
你无法执行: str[1]='z';
但你可以: char c1=str[1];
例如 string str="abc";
你无法执行: str[1]='z';
但你可以: char c1=str[1];
#12
懂了,谢谢
#1
楼主试试下面写法
public void ChangeString(ref string str)
{
str = "I heart you";
}
调用时:
TestString.ChangeString(ref Test);
#2
你看看你写的那个语句,你那个test=i love you 那你下面传的值也是str=i love you str=i heart you
这个值就改变的了,但是这只是个参数传过来的,你外面那个实参你确没有改变的,改变的只是形参,如果你在上面直接test=i heart you 那这个肯定是输出是i heart you !
这个值就改变的了,但是这只是个参数传过来的,你外面那个实参你确没有改变的,改变的只是形参,如果你在上面直接test=i heart you 那这个肯定是输出是i heart you !
#3
string是引用类型,但比较特殊,难道你看书没有看到?
#4
数组也是形参不是改变了么。
#5
这个我知道。
#6
我知道,但是不知道哪里特殊
#7
你只要这样记住就可以了,string是特殊的引用类型,所以他是例外的,不会被改变
#8
值传递和引用传递
你可以把string的传递 特殊当成值传递
你可以把string的传递 特殊当成值传递
#9
public void ChangeArray(int[] ints)
{
ints = new int[]{100,1,2,3};
}
你试一下这个。。。。
#10
str = "I heart you";
相当于: str = new string("I heart you");
相当于: str = new string("I heart you");
#11
string 是一个特殊的类型在于,string 一旦创建,不能再修改里面的值,要改变,只能从新创建。
例如 string str="abc";
你无法执行: str[1]='z';
但你可以: char c1=str[1];
例如 string str="abc";
你无法执行: str[1]='z';
但你可以: char c1=str[1];
#12
懂了,谢谢