Solidity函数修饰符(public、external、internal、private、view、pure)

Solidity函数可见性修饰符(public、external、internal、private)

在Solidity中,public、private、internal和external是四个不同的访问修饰符,用于限定函数或状态变量的可见性和可访问性。

public(公共)

  • 公共函数可以被合约内部的其他函数调用,也可以通过合约的外部调用接口(ABI)被外部账户或合约调用
  • Solidity会为公共函数生成一个函数选择器,并将其添加到合约的 ABI 中,从而允许外部调用者调用该函数。
  • 这种函数可以被继承的合约访问。
pragma solidity ^0.8.0;

contract Example {
    uint public myNumber; // 公共状态变量
    function setNumber(uint _num) public { // 公共函数
        myNumber = _num;
    }
}

从合约内部调用公共函数时,函数的上下文(如msg.sender)会被重置为合约的地址。

external 只能被外部地址调用

external:表示函数只能被外部地址调用,即只能通过交易来调用。这通常用于将合约暴露给外部世界,例如公开的接口函数。

外部函数(external functions)只能被合约外部的调用者访问,而不能从合约内部或其他合约中直接调用

private

private修饰符表示函数或状态变量仅能在当前合约内部访问。私有函数和状态变量对于外部地址是不可见的,只能在合约内的其他函数中使用。私有函数对于代码封装和内部逻辑的隐藏非常有用。

只能在当前合约内部调用,不能从合约的派生合约中调用。

internal

internal修饰符表示函数或状态变量可以在当前合约内部以及继承合约中进行访问。**与private修饰符不同,internal修饰符允许继承的合约访问被修饰的函数或状态变量。**对于需要在合约继承链中共享的内部逻辑,使用internal修饰符是有用的。

只能在当前合约或继承自当前合约的合约内部被读取。

状态变量的访问权限

  • view 对状态变量只读,这里的状态变量还包含区块链的内建对象数据、时间戳等
  • pure 既不修改,也不读取状态变量的值

如果函数不加pure或view,则代表会修改状态变量的值!

总结

函数的访问权限:

  • public 最大的访问权限,子类可以继承、可以访问,当前类能访问
  • private 仅限内部访问,子类不能继承、不能访问
  • internal 子类可以继承、可以访问,当前类可以访问
  • external 子类可以继承、可以访问,当前类不能访问

internal 和 private 类似,不过, 如果某个合约继承自其父合约,这个合约即可以访问父合约中定义的“内部”函数。

external 与public 类似,只不过这些函数只能在合约之外调用 - 它们不能被合约内的其他函数调用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值