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";
}
}
答案 0 :(得分:11)
DateTime不是引用类型,它是一种结构,表示值类型。
答案 1 :(得分:5)
DateTime
是一个无法修改的值类型(结构)。它不是参考类型。
当你调用一个似乎改变结构的方法时,它通常会返回一个全新的结构,而不修改原始结构,因为原始版本不能修改(它是不可变的)。虽然这同样适用于字符串,但字符串不是值类型;它们是被设计为不可变的引用类型,因此需要StringBuilder
等类。
答案 2 :(得分:3)
DateTime是一种结构,因此它是值类型。
与任何其他值类型一样,它超过按值(在实践中复制)并且仅在注入函数堆栈之后。
答案 3 :(得分:1)
DateTime是结构 - 因此是值类型。 字符串是不可变的引用类型。
答案 4 :(得分:0)
正如其他人所提到的,区别在于Class(StringBuilder是)和Struct(DateTime是)。以下是一些有助于进一步提供帮助的文章:
http://msdn.microsoft.com/en-us/library/ms173109.aspx
和
http://msdn.microsoft.com/en-us/library/aa288471(v=vs.71).aspx
在OOP中,对结构与类的良好理解很重要,尤其是c#