Skip to content

访问权限

Solidity 提供了四种访问权限:publicprivateinternalexternal

这些权限可以用来限制函数和状态变量的访问。以下是每种权限的解释和编程演示。

public

可以在合约内外访问。默认情况下,所有函数和状态变量都是 public

solidity
pragma solidity ^0.8.0;

contract Example {
    uint public count; // public状态变量

    function increment() public {
        count++;
    }
}

private

只能在当前合约中访问。无法在派生合约或外部访问。

solidity
pragma solidity ^0.8.0;

contract Example {
    uint private count; // private状态变量

    function increment() public {
        count++;
    }

    function getCount() public view returns (uint) {
        return count; // 仅限于在合约内部访问
    }
}

internal

只能在当前合约内和派生合约中访问。不能在外部访问。

solidity
pragma solidity ^0.8.0;

contract Example {
    uint internal count; // internal状态变量

    function increment() internal {
        count++;
    }

    function getCount() public view returns (uint) {
        return count; // 仅限于在合约内部和派生合约中访问
    }
}

contract Example2 is Example {
    function incrementCount() public {
        increment(); // 可以在合约内和派生合约中访问
    }
}

external

只能在合约外部调用,不能在合约内部访问。

solidity
pragma solidity ^0.8.0;

contract Example {
    uint public count;

    function increment() public {
        count++;
    }

    function getCount() external view returns (uint) {
        return count; // 仅限于在合约外部调用
    }
}

总的来说,访问权限是用来控制合约的接口和功能暴露给外部的程度。

比如,公开的接口意味着接口是所有人都可以访问和调用的,而私有的接口是只有在合约内部才能访问和调用。