Solidity中“internal”和“private”的区别是什么?

11
在Solidity中,我们有四种访问类型。其中两种是privateinternal。如果两者都可以在智能合约内部使用,并且在部署后都不可见,那么它们之间有什么区别呢?

“不可见部署后”指的是用户或另一个智能合约无法看到(或使用)它们。 - user2340939
3个回答

23

访问类型:

public - 可以在合约部署后使用,在继承的合约中也可以使用。

external - 可以在合约部署后使用,但是不能在继承的合约中使用。

internal - 不能在合约部署后使用,但是可以在继承的合约中使用。

private - 不能在合约部署后使用,也不能在继承的合约中使用。


17

子合约可以访问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


1
  • public:任何人都可以访问该函数
  • private:只有此智能合约才能调用此函数
  • internal:只有此智能合约和继承自它的智能合约才能调用此函数
  • external:除非此智能合约,否则任何人都可以访问此函数

请注意,externalpublic 使用更少的 gas,因此如果该函数不被您的合约使用,请优先选择 external 而不是 public


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接