0x01 前言
將solidity的瑣碎知識點都放在第四模塊。摘自:https://blog.csdn.net/Black_BearB/article/details/81000513
0x02 public
任意訪問;公共函數是合約接口的一部分,可以通過內部調用或通過消息調用;對公共狀態變量而言,會有的自動訪問限制符的函數生成。
- 當一個狀態變量的權限為public類型時,它就會自動生成一個可供外部調用的get函數。
- 只有public類型的函數才可以供外部訪問。
- 狀態變量聲明時,默認為internal類型,只有顯示聲明為public類型的狀態變量才會自動生成一個和狀態變量同名的get函數以供外部獲取當前狀態變量的值。
- 函數聲明時默認為public類型,和顯式聲明為public類型的函數一樣,都可供外部訪問。
函數可以被定義為external, public, internal or private,缺省是 public。
對狀態變量而言, external是不可能的,默認是 internal。
0x03 private
僅當前合約內;私有函數和狀態變量僅僅在定義該合約中可見, 在派生的合約中不可見,可防止其他合約訪問和修改信息。
0x04 internal
僅當前合約及所繼承的合約(狀態變量聲明時默認,internal的翻譯為:內部函數。
- internal類型的狀態變量可供外部和子合約調用。
- internal類型的函數和private類型的函數一樣,智能合約自己內部調用,它和其他語言中的protected不完全一樣。
- 子合約只能繼承父合約中的所有的public類型的函數,可以對其進行重寫,不能繼承internal/private的函數.
- 內部(internal)函數只能在當前合約內被調用(在當前的代碼塊內,包括內部庫函數,和繼承的函數中),訪問函數直接用函數名 f。
- 外部(external)函數由地址和函數方法簽名兩部分組成,可作為外部函數調用的參數,或返回值,訪問函數用 this.f 。
0x04 external
僅外部訪問(在內部也只能用外部訪問方式訪問);外部函數是合約接口的一部分,這意味着它們可以從其他合約調用, 也可以通過事務調用。外部函數f不能被內部調用(即 f()不執行,但this.f()執行)。外部函數,當他們接收大數組時,更有效。
其他資料
solidity源文件結構:https://learnblockchain.cn/docs/solidity/layout-of-source-files.html?highlight=external