为什么在C#中我的两个变量指向不同的DateTime对象?
DateTime a1 = DateTime.Now;
DateTime a2 = a1;
a1 = a1 + TimeSpan.FromMinutes(15);
a2 = a2 - TimeSpan.FromMinutes(16);
Run Code Online (Sandbox Code Playgroud)
我意识到a2实际上指的是一个与a1不同的新对象.
但在其他情况下.假设我有一个人类,年龄= 1;
Person a1 = new Person();
a2 = a1;
a2 = Person.Age = 2;
Run Code Online (Sandbox Code Playgroud)
在Person Case中,a1和a2指向同一个对象.我真的很困惑,有人可以解释一下吗?
Ode*_*ded 28
DateTime 是一种价值类型 - 一种结构.
使用值类型,当您执行以下操作时:
DateTime a2 = a1;
Run Code Online (Sandbox Code Playgroud)
a2获取值的副本a1.它与同一内存位置的引用不同,而是完整的单独副本.
另一方面,Person是一个引用类型 - 一个类.
当你这样做时:
Person p2 = p1;
Run Code Online (Sandbox Code Playgroud)
对于引用类型,p2指向的引用与指向的引用相同p1.因此,一方面的变化都是两者的变化.
请参阅MSDN上的值类型和引用类型.
正如其他人已经指出的那样DateTime是一个结构,而不是一个类,因此是一个值类型.如果更改用于显示结构的文本颜色,则可以在Visual Studio编辑器中将其可视化.在菜单Tools>中打开对话框,Options然后导航到Environment>Fonts and Colors

更改委托,枚举,接口和结构(值类型)的颜色很有帮助.