修饰符 | 可见性描述 |
public | 在合约内和合约外都可以被访问,即合约内外部都可以调用该函数。这种类型的函数可以被合约内和合约外的任何地址调用。 |
private | 只有在当前合约内可以被访问,即只有合约内可以调用该函数。这种类型的函数只能在合约内部被调用。 |
external | 在合约外部可以被访问,但在合约内部不能被访问。这种类型的函数只能被合约外的地址调用。 |
internal | 只有在当前合约内以及继承合约中可以被访问。这种类型的函数只能在当前合约内部和合约继承树上的合约内部被调用。 |
示例代码:
pragma solidity ^0.8.7;
contract FunctionVisibility {
uint public num; // 公有变量
constructor() {
num = 0;
}
function publicFunc() public view returns (uint) {//公有函数
return num;
}
function privateFunc() private view returns (uint) {//私有函数
return num;
}
function externalFunc() external view returns (uint) {//外部函数
return num;
}
function internalFunc() internal view returns (uint) {//内部函数
return num;
}
function callPrivateFunc() public view returns (uint) {
return privateFunc(); // 只能在合约内调用
}
function callExternalFunc() public view returns (uint) {
return externalFunc(); // 只能在合约外调用
}
function callInternalFunc() public view returns (uint) {
return internalFunc(); // 只能在当前合约内或继承的合约内调用
}
}
注:
num:公有变量,可以被合约内外的所有地址访问。
publicFunc :公有函数,也可以被合约内外的所有地址访问。
privateFunc :私有函数,只能在当前合约内部被访问。
externalFunc :外部函数,只能在合约外被访问。
internalFunc :内部函数,只能在当前合约内部以及继承的合约内部被访问。