solidity學習(四)public/private/internal/external 函數可見性


0x01 前言

將solidity的瑣碎知識點都放在第四模塊。摘自:https://blog.csdn.net/Black_BearB/article/details/81000513

0x02 public

任意訪問;公共函數是合約接口的一部分,可以通過內部調用或通過消息調用;對公共狀態變量而言,會有的自動訪問限制符的函數生成。

  1. 當一個狀態變量的權限為public類型時,它就會自動生成一個可供外部調用的get函數。
  2. 只有public類型的函數才可以供外部訪問。
  3. 狀態變量聲明時,默認為internal類型,只有顯示聲明為public類型的狀態變量才會自動生成一個和狀態變量同名的get函數以供外部獲取當前狀態變量的值。
  4. 函數聲明時默認為public類型,和顯式聲明為public類型的函數一樣,都可供外部訪問。

函數可以被定義為external, public, internal or private,缺省是 public。

對狀態變量而言, external是不可能的,默認是 internal。

 

0x03 private

僅當前合約內;私有函數和狀態變量僅僅在定義該合約中可見, 在派生的合約中不可見,可防止其他合約訪問和修改信息。

 

0x04 internal

僅當前合約及所繼承的合約(狀態變量聲明時默認,internal的翻譯為:內部函數

  1. internal類型的狀態變量可供外部和子合約調用。
  2. internal類型的函數和private類型的函數一樣,智能合約自己內部調用,它和其他語言中的protected不完全一樣。
  3. 子合約只能繼承父合約中的所有的public類型的函數,可以對其進行重寫,不能繼承internal/private的函數.
  4. 內部(internal)函數只能在當前合約內被調用(在當前的代碼塊內,包括內部庫函數,和繼承的函數中),訪問函數直接用函數名 f。
  5. 外部(external)函數由地址和函數方法簽名兩部分組成,可作為外部函數調用的參數,或返回值,訪問函數用 this.f 。

 

0x04 external

僅外部訪問(在內部也只能用外部訪問方式訪問);外部函數是合約接口的一部分,這意味着它們可以從其他合約調用, 也可以通過事務調用。外部函數f不能被內部調用(即 f()不執行,但this.f()執行)。外部函數,當他們接收大數組時,更有效。

其他資料

solidity源文件結構:https://learnblockchain.cn/docs/solidity/layout-of-source-files.html?highlight=external

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM