[英]C# passing parameters by reference confusion
看了以后有些文章还是很困惑。 为什么更改StringBuilder的值会更改而DateTime的值不会更改? 据我了解,这两种都是引用类型:
class Program
{
static void Main(string[] args)
{
DateTime myDt = DateTime.MinValue;
Change(myDt);
Console.WriteLine(myDt);
StringBuilder y = new StringBuilder();
y.Append("hello");
Foo(y);
Console.WriteLine(y);
String test = "hello";
Foo(test);
}
public static void Change(DateTime dt)
{
dt.AddDays(24);
//or dt=dt.AddDays(24);
}
static void Foo(StringBuilder x)
{
x.Append(" world");
}
static void Foo(String x)
{
x = x + " world";
}
}
DateTime不是引用类型,而是结构,表示值类型。
DateTime是一个结构,因此它是一个值类型。
因此,就像其他任何值类型一样,它是按值 (在实践中复制)过去的,并且仅在注入到函数堆栈中之后才过去。
DateTime是一个结构-因此是一种值类型。 字符串是不可变的引用类型。
正如其他人提到的,区别在于类(StringBuilder是)和结构(日期时间是)。 以下是一些可以进一步帮助的文章:
http://msdn.microsoft.com/en-us/library/ms173109.aspx
和
http://msdn.microsoft.com/zh-CN/library/aa288471(v=vs.71).aspx
在OOP中,尤其是C#,对结构与类的良好理解非常重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.