在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位

在c#中实践值/引用内存

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#中的引用类型。