繁体   English   中英

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 - 部署合约时不能使用,不能在继承合约中使用

internal就像在 Java 中protected

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

请注意, external使用的 gas 比public少,因此如果您的合约未使用该功能,请优先使用external而不是public

本文更多解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM