• 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

    珍惜时间,只错一次
  • 相关阅读:
    bzoj 4883 [Lydsy1705月赛]棋盘上的守卫——并查集(思路!)
    洛谷 1979 华容道——最短路+dp
    51nod 1443 路径和树——最短路生成树
    hdu 2222 Keywords Search——AC自动机
    bzoj 2067 [Poi2004]SZN——二分+贪心
    洛谷 1084 疫情控制——二分答案+贪心(贪心思路!)
    CF 1042A Benches——二分答案(水题)
    洛谷 1314 聪明的质监员——二分答案
    洛谷P3690 LCT模板
    bzoj1875 [SDOI2009]HH去散步——矩阵快速幂
  • 原文地址:https://www.cnblogs.com/TEAM0N/p/14962617.html
Copyright © 2020-2023  润新知