C#中所有的string类型变量都是引用类型的。但我不明白了,如果一个方法接收一个string参数那么,我接收的是这个字符串本身,还是这个string字符串存放的内存地址? 请看下面示例 class Program
{
static void Main()
{
string x ="abc";
Test(x);
Console.WriteLine(x);
}
static void Test(string y)
{
y = "123";
}
}
输出结果是
abc我的问题是,既然string类型是引用类型的,那么输出的结果应该是123,因为传递到Test()的是字符串x的地址。我觉得,这有点和string是引用类型的说法自相矛盾了。
小弟初学,有什么不对的地方请大伙多多指教。
{
static void Main()
{
string x ="abc";
Test(x);
Console.WriteLine(x);
}
static void Test(string y)
{
y = "123";
}
}
输出结果是
abc我的问题是,既然string类型是引用类型的,那么输出的结果应该是123,因为传递到Test()的是字符串x的地址。我觉得,这有点和string是引用类型的说法自相矛盾了。
小弟初学,有什么不对的地方请大伙多多指教。
解决方案 »
- vs2008winform中为什么没有默认的登陆控件这些啊。急啊,在线等
- .net导出内容至word
- C#字符串在日文系统中有乱码
- 设置模式里的,装饰模式有一点不懂,帮我分析下代码号码
- 用户控件的问题?
- 利用反射怎样获得动态加载Form上TextBox与ComboBox中的值
- 动态生成的控件怎么控制位置啊 救命啊
- 如何实现添加一个按钮.按下按钮的时候窗体会最小化到任务栏呢?
- 为什么Request怎么取到的字符串只有一部份
- 100分求一个对Windows中DataGrid控件进行全屏幕编辑的例子!
- Dictionary可以排序吗?(不是SortedDictionary)
- win小程序,判断手机上10条数据有无重复数据的高效率写法,跪求解决方案...谢谢
public int Data=10;
}
class Program
{
static void Main()
{
A x =new A();
x.Data=20;
Test(x);
Console.WriteLine(x.Data);
}
static void Test(A y)
{
y = new A();
}
}
不知道,我这么想对不对。大家还有什么看法都踊跃发言阿。
static void Test(out string y)
{
y = "123";
}
这样应该也OK
public int Data=10;
}
class Program
{
static void Main()
{
A x =new A();
x.Data=20;
Test(x);
Console.WriteLine(x.Data);
}
static void Test(A y)
{
// y = new A(); 我注释掉2楼的这行代码。
y.Data = 100; //我新增的一行代码
}
} 我把2楼的代码修改一下,运行结果就变成100了。不知我现在理解对不对,string会自动隐含的new出自己的实例。不知道我这么想对不对,还是有什么更官方正正确的说法?谢谢大伙。
其实我们大家使用起来string类型就是按值类型(与值类型使用起来相似)。
{
public static void Main()
{
string strTest = "123";
Msg(strTest);
Console.WriteLine(strTest); Console.ReadLine();
} public static void Msg(string str)
{
str = "456";
Console.WriteLine(str);
}
} 输出结果是:456
123解答如下:string是一个特殊的引用类型,它实际上是一个字符串池,string strTest = "123",其实在堆上strTest中存的是字符串123的引用,当调用Msg方法时,strTest作为参数传递给 str,这个时候只是对strTest做了一个临时的拷贝,使strTest指向字符串456,此时做的修改只是对引用的修改并 没有修改对象本身,所以输出的时候还是原来那个对象的值。
------MSDN这是很基础的问题...多看书...多看MSDN...