网上看到struct与class之间的区别,都写的很多,当然说的是对的,也很详细。不过我个人不喜欢照本宣科,还是要有自己的理解和认识,方便记忆。
(前提:对于值类型与引用类型有一定的认识)
结构最重要的两点:
- struct 值类型
- struct 不能被继承(所以不能被protected)
以前总会纠结一个问题,什么时候用Class,什么时候用Struct。(不知道大家有没有同样的困惑)
值类型:就代表它存储的位置是stack(堆)上,存储在stack上就代表,它传递的不是值所在内存中的指针,代表它传递的是副本,这些最终说明了一个问题,就是在changeValue这个方法里修改它的值之后,在main方法中并没有任何影响。
static void Main(string[] args)
{
PersonClass personClass = new PersonClass();
personClass.Name = "Class";
PersonStruct personStruct = new PersonStruct();
personStruct.Name = "Struct";
changeValue(personClass, personStruct);
Console.WriteLine(personClass.Name);
Console.WriteLine(personStruct.Name);
}
public static object changeValue(PersonClass personClass, PersonStruct personStruct)
{
personClass.Name = "Class1";
personStruct.Name = "Struct1";
return null;
}
结果:
不能被继承:这个很好理解,它不能继随别人,别人也不能继承它。当然它是可以实现接口的。
结构与类之间相同处很多很多。我们无需记住相同点,只需要记住不同点(类型与继承),自然就知道在什么样的场景可以使用结构。
Tip:msdn给出的建议,以下几种情况适合使用struct
- 小于16个字节
- 偏向于值,是简单数据,而不是偏向于"面向对象"
- 希望值不可变
如果大家有什么好的想法,可以留言,我肯定会学习并实践好再拿出来分享。
非常感谢。
如果对您有帮助,请点赞!