Jon*_*eet 83
是的他们可以.这是个好主意吗?那么,这取决于具体情况.就个人而言,我很少首先创建自己的结构...我会对任何新的用户定义结构进行一定程度的怀疑.我并不是说它总是错误的选择,只是它需要更多明确的论证而不是一个阶级.
虽然结构有一个可变对象的引用是一个坏主意...否则你可以有两个看起来独立但不是的值:
MyValueType foo = ...;
MyValueType bar = foo; // Value type, hence copy...
foo.List.Add("x");
// Eek, bar's list has now changed too!
Run Code Online (Sandbox Code Playgroud)
可变结构是邪恶的.引用可变类型的不可变结构以不同的方式悄悄地邪恶.
Jar*_*Par 19
当然,这样做也不错.
struct Example {
public readonly string Field1;
}
Run Code Online (Sandbox Code Playgroud)
readonly不是必需的,但优良的做法是使struct不可变.
小智 5
之所以不能具有可变结构,是因为引用类型的行为。阅读本文:http : //www.yoda.arachsys.com/csharp/parameters.html
当您有一个包含对象的结构(不是int或double之类的原语的任何结构)并复制该结构的实例时,内部的对象不会被“深层”复制,因为它只是引用(指针) )到包含实际类的内存位置。因此,如果复制包含类实例的可变结构,则该副本将引用与原始实例相同的实例(因此,上面的状态栏列表已更改)。
如果绝对必须使该结构可变,则将任何类实例设置为只读状态,或者-这是不好的做法-尝试确保您绝不复制该结构。