Kun*_*esh 15 c# value-type reference-type
值类型行为表明,我们持有的任何值都无法通过其他变量进行更改.
但是我仍然对我在这篇文章标题中提到的内容感到困惑.任何人都可以澄清吗?
dle*_*lev 23
值类型可以是可变的(或模数一些奇怪的边缘情况)不可变,具体取决于您如何编写它们.
易变的:
public struct MutableValueType
{
public int MyInt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
一成不变的:
public struct ImmutableValueType
{
private readonly int myInt;
public ImmutableValueType(int i) { this.myInt = i; }
public int MyInt { get { return this.myInt; } }
}
Run Code Online (Sandbox Code Playgroud)
内置值类型(int,double等)是不可变的,但是你可以很轻松地创建自己的可变struct秒.
一条建议:不要.可变值类型是一个坏主意,应该避免.例如,这段代码做了什么:
SomeType t = new SomeType();
t.X = 5;
SomeType u = t;
t.X = 10;
Console.WriteLine(u.X);
Run Code Online (Sandbox Code Playgroud)
这取决于.如果SomeType是值类型,则打印5,这是一个非常令人困惑的结果.
有关为什么要避免使用可变值类型的详细信息,请参阅此问题.