修飾符 | 可見性描述 |
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 :内部函數,隻能在目前合約内部以及繼承的合約内部被通路。