Solidity 中内部和私有有什么区别?

问题描述 投票:0回答:4

在 Solidity 中,我们有四种访问类型。其中两个是

private
internal
。 如果两者都可以在智能合约中使用并且部署后都不可见,有什么区别?

blockchain solidity smartcontracts
4个回答
24
投票

访问类型:

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;
    }
}

您可以在文档部分可见性和 Getters 中找到更多信息。


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

请注意,

external
使用的 Gas 量比
public
少,因此,如果您的合约未使用该功能,则优先选择
external
而不是
public


0
投票

虽然这里有彻底的答案,但我认为我们可以对这些关键字采取的另一种方法是:

  • internal
    external
    提到了区块链看待功能的方式,例如合同本身内部,合同外部(外部且仅外部)。
  • private
    public
    提到 OOP 中的继承概念如何可靠地工作。

祝大家好运。

© www.soinside.com 2019 - 2024. All rights reserved.