Solidity 中的 internal 和 private 有什么区别?

What is difference between internal and private in Solidity?

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

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 - 可以在部署合约时使用,也可以在继承的合约中使用

external可以在部署合约时使用,不能在继承合约中使用

internal - 部署合约时不能使用,可以在继承的合约中使用

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