Skip to content

Latest commit

 

History

History
61 lines (45 loc) · 2.56 KB

26 可见性.md

File metadata and controls

61 lines (45 loc) · 2.56 KB

可见性

Solidity 合约中的函数和状态变量具有不同的可见性。这些可见性关键字用于限制合约内外对函数和状态变量的访问权限。

以下是 Solidity 中可见性关键字的详细说明:

  • public:可以在合约内外被调用和读取。
  • external:只能在合约外部被调用。该关键字通常用于公开函数,以便其他合约可以调用它。
  • internal:只能在当前合约和其继承合约中被调用和读取。
  • private:只能在当前合约中被调用和读取。

以下示例演示了如何在 Solidity 合约中使用不同的可见性关键字。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

contract Visibility {
    uint256 private privateVar;
    uint256 internal internalVar;
    uint256 public publicVar;

    function setVars(uint256 _privateVar, uint256 _internalVar, uint256 _publicVar) public {
        privateVar = _privateVar;
        internalVar = _internalVar;
        publicVar = _publicVar;
    }

    function getPrivate() private view returns (uint256) {
        return privateVar;
    }

    function getInternal() internal view returns (uint256) {
        return internalVar;
    }

    function getPublic() public view returns (uint256) {
        return publicVar;
    }

    function getExternal() external view returns (uint256) {
        return publicVar;
    }
}
  • Visibility 合约定义了一个私有状态变量 privateVar、一个内部状态变量 internalVar 和一个公共状态变量 publicVar
  • setVars 函数是一个公共函数,它用于设置这三个状态变量的值。
  • getPrivate 函数是一个私有函数,只能在当前合约中被调用和读取。
  • getInternal 函数是一个内部函数,可以在当前合约及其继承合约中被调用和读取。
  • getPublic 函数是一个公共函数,可以在合约内外被调用和读取。
  • getExternal 函数是一个外部函数,只能在合约外部被调用。

现在,我们可以通过 Remix 调用 setVars 函数来设置这三个状态变量的值,并使用 getPrivategetInternalgetPublicgetExternal 函数来检索这些值。

visibility-remix

我们可以看到,在调用不同的可见性函数后,成功检索了每个状态变量的值。

注意

  • 通常情况下,应该尽可能使用最小的可见性。例如,如果一个状态变量只需要在当前合约中使用,那么应将其声明为 private