在c#中实践值/引用内存
本文关键字:引用 内存 | 更新日期: 2023-09-27 18:07:43
假设我们有这样一个方法:
// By value
private static void ShowMessage(string Message)
{
Console.WriteLine("{0}", Message);
}
是一个好的做法通过值字符串只有当我们想要查看/显示内容?
例如,在32位系统中,一个有20个字符的字符串(c#默认:UTF-16)引用是32位,但按值计算是(20个字符*(2字节* 8位))= 320位
string
是一个引用类型,所以即使您按值传递它,它也是对传递的字符串的引用,而不是字符串的副本。因此,字符串的长度对传递给方法的内容没有任何影响。
理解值类型和引用类型之间的区别,以及按值传递参数和按引用传递参数之间的区别是非常重要的。我建议你阅读这篇文章,它给出了一个很好的解释。
您没有按值传递整个字符串;string
是一个引用类型,因此您通过值传递的是对实际对象的引用。
在这种情况下,"参考"是一个故意模糊的术语。实现实际上传递了一个指向实例的指针。
我建议您只在需要更改方法中的变量内容时使用ref:
private static void ShowMessage(ref string text){
Console.WriteLine(text); // use the old content
text= "this is the new value"; //the new variable content will override the old one
}
当内容被写入但不被读取时,你也可以使用out:
private static void ShowMessage(out string text){
// you can't use the text variable, but you must set it's value
text= "this is the new value"; //the new variable content will override the old one
}
在任何其他情况下,您应该将其用作任何其他值变量。正如上面的朋友所说,字符串是c#中的引用类型。