@Ken給你完美的答案。這一個是如何獲得與struct
(值類型)相同的行爲。
注意:可變值類型有非常不直觀的行爲,不要在家中嘗試這:)。
要獲得與值類型相似的行爲,您需要實現一些接口並通過接口設置屬性,因爲將自己的類型拆箱struct
將始終創建副本,並且您將無法修改原始值。
void TortureMutableBoxedValueType()
{
object o1 = new IntWrapper(5);
object o2 = o1;
Console.WriteLine(((IValue)o1).Value); // outputs original 5
((IValue)o2).Value = 8;
Console.WriteLine(((IValue)o1).Value); // outputs new 8
}
interface IValue
{
int Value {get;set;}
}
// Don't use mutable value types - this is just sample.
public struct IntWrapper : IValue
{
int v;
public int Value { get { return v;} set {v = value;}}
public IntWrapper(int value) { v = value; }
}
拳擊不改變它的類型。它應該保持一個值類型。 –
我不認爲使用對象實際上使int成爲引用類型;它存儲一個未確定的類型,但.NET保持對該對象的理解(它知道它是一個int,它不是引用類型)。 –
裝箱值的類型是不可變的。賦值'o2 = 8;'創建一個新的盒裝int,並使其成爲'o2'的引用。另一個變量「o1」仍然指向第一個裝箱的int。字符串也是如此:'string s1 =「5」;字符串s2 = s1; s2 =「8」;'實際上,可變參考類型也是如此:'列表 x =新列表 {5};列表 y = x; y =新列表 {8};' –
phoog