2013-09-23 66 views
0

嗨,我是c#的全新品牌。我正在閱讀這本書,這填補了空白,說__是數據字段或局部變量的值不能被修改?有人能告訴我答案嗎?謝謝。 ps:總新手我搜索了youtube,但我在代碼中搞砸了。 謝謝。數據字段或其值不能修改的局部變量?

+0

常數可以作爲答案。 –

+0

@Yoda只適用於原始類型 – undefined

+2

@Yoda如果您的搜索引擎是Youtube – Ralf

回答

3

的完整的答案是雙重的:

1)對於基本類型(如intdoublestring等)const改性劑都可以使用,這的確意味着該值這種類型的變量不能以任何方式改變

2)對於非原始類型,存在readonly修飾符。請注意,您不能將const應用於非原始類型。這意味着同樣的事情,以供參考和值類型: 參考到這個變量不能改變後,建設這個對象。 但是,它有不同的後果:

2.1)readonly對象本身可以通過它的公共API進行更改。例如:

class Foo{ 
    private readonly List<int> list; 
    public Foo(){ list = new List<int>();} 

    public Test() 
    { 
    list = new List<int>(); // invalid; your reference is readonly 
    list.add(5);//works, you are changing the object, but not touching it's reference 
    } 
} 

2.2)對於值類型readonly一個同時使用readonly修改一定要小心 - 它可能導致與可變結構細微的錯誤。例如,請參閱C#: Why do mutations on readonly structs not break?。然而,如果你的struct是不可變的,你可以有效地獲得const關鍵字的語義

+0

'readonly'可用於非基元類型。這兩個關鍵字對於值和引用類型的工作方式都是相同的,它們的語義不會因變量類型而改變。 –

+0

程序員的後果改變了。你沒有可變類的問題,但你確實有可變結構 – undefined

+0

'你沒有可變類的問題'取決於你的意圖。如果我用readonly標記引用變量,我可能會認爲它不會被改變,但是如果一個對象是這種類型的變量 - 我可能是非常錯誤的。 –