在Solidity中,我们有四种访问类型。其中两种是
private
和internal
。如果两者都可以在智能合约内部使用,并且在部署后都不可见,那么它们之间有什么区别呢?private
和internal
。如果两者都可以在智能合约内部使用,并且在部署后都不可见,那么它们之间有什么区别呢?访问类型:
public
- 可以在合约部署后使用,在继承的合约中也可以使用。
external
- 可以在合约部署后使用,但是不能在继承的合约中使用。
internal
- 不能在合约部署后使用,但是可以在继承的合约中使用。
private
- 不能在合约部署后使用,也不能在继承的合约中使用。
子合约可以访问internal
属性(但无法从外部合约访问)。
即使在子合约中,也无法访问private
属性。
pragma solidity ^0.8;
contract Parent {
bool internal internalProperty;
bool private privateProperty;
}
contract Child is Parent {
function foo() external {
// ok
internalProperty = true;
// error, not visible
privateProperty = true;
}
}
您可以在文档部分找到更多信息:Visibility and Getters。
public
:任何人都可以访问该函数private
:只有此智能合约才能调用此函数internal
:只有此智能合约和继承自它的智能合约才能调用此函数external
:除非此智能合约,否则任何人都可以访问此函数请注意,external
比 public
使用更少的 gas,因此如果该函数不被您的合约使用,请优先选择 external
而不是 public
。