嗨,我是c#的全新品牌。我正在閱讀這本書,這填補了空白,說__是數據字段或局部變量的值不能被修改?有人能告訴我答案嗎?謝謝。 ps:總新手我搜索了youtube,但我在代碼中搞砸了。 謝謝。數據字段或其值不能修改的局部變量?
回答
的完整的答案是雙重的:
1)對於基本類型(如int
,double
,string
等)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
關鍵字的語義
'readonly'可用於非基元類型。這兩個關鍵字對於值和引用類型的工作方式都是相同的,它們的語義不會因變量類型而改變。 –
程序員的後果改變了。你沒有可變類的問題,但你確實有可變結構 – undefined
'你沒有可變類的問題'取決於你的意圖。如果我用readonly標記引用變量,我可能會認爲它不會被改變,但是如果一個對象是這種類型的變量 - 我可能是非常錯誤的。 –
- 1. 局部變量或類字段?
- 2. 鎖定字段或局部變量?
- 3. C++:不能修改全局變量
- 4. 爲字段&局部變量
- 5. JavaScript - 函數不修改全局變量
- 6. 不能修改的變量
- 7. 變量不能修改divCount
- 8. 字段 'Invoice_Date' 不能修改
- 9. 變量不改變其值
- 10. 改變局部變量的值執行原始全局變量的值變化
- 11. 如何修改java字節碼中局部變量的類型
- 12. 全局變量修改TCL
- 13. 修改全局變量Ant
- 14. 不能更改函數內部的全局變量(Javascript)
- 15. 如何修改函數內部的全局變量?
- 16. 修改一個函數內部的全局JavaScript變量
- 17. 全局變量修改的const成員函數,其中通過全局函數
- 18. 字段到本地或全局變量
- 19. Javascript:不修改滑塊功能中的全局變量
- 20. 將局部變量傳遞給局部變量的隱藏字段
- 21. 我不能將數據綁定到WPF/XAML的局部變量
- 22. Python:修改方法 - 內部方法內的局部變量
- 23. 根據不同變量的值修改靜態整數
- 24. 通過修飾器改變局部變量的作用域?
- 25. 如何從修改全局變量的函數中返回值?
- 26. 全局變量不能改變
- 27. 功能不改變全局變量
- 28. 與局部變量其中
- 29. django自定義字段 - 如何修改其他字段的值
- 30. 不能修改返回的AJAX變量
常數可以作爲答案。 –
@Yoda只適用於原始類型 – undefined
@Yoda如果您的搜索引擎是Youtube – Ralf