[英]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.