函数
函数修饰符
function <function name> (<parameter types>) {internal|external|public|private} [pure|view|payable|virtual|override|Modifier] [returns (<return types>)]
- internal:未公开的函数,只能在合约内部使用,不能通过
abi
直接/外部调用,允许在继承的子合约中使用 - external:公开的函数,可以通过
abi
直接调用,也可以在本合约内通过 this.func 调用,允许在继承的子合约中使用 - public:公开的函数,可以通过
abi
直接调用,允许在继承的子合约中使用 - private: 未公开的函数,只能在合约内部使用,不允许通过
abi
直接调用,不允许在继承的子合约中使用 - pure: 只读,函数只能读取局部变量
- view: 只读,函数可以读取状态变量、局部变量、全局变量
- payable:
payable
修饰符表明函数支持接收NativeToken(msg.value!=0)
- virtual: 虚函数,表明函数允许重载修改内部逻辑, 多用于接口合约
- override: 重载函数,重新定义函数内部逻辑,但是函数
selector
必须保持一致(函数名称、函数参数类型和数量) - Modifier: 修饰器,内部定义条件判断, 允许在继承的子合约中使用
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
contract parentOne {
uint256 public oneValue;
function OneInternal() internal virtual {
oneValue += 1;
}
function OneExternal() external virtual {
oneValue += 2;
}
function OnePublic() public virtual {
oneValue += 3;
}
function OnePrivate() private {
oneValue += 4;
}
}
contract functionsChecker is parentOne {
function addOne() external {
OneInternal();
}
// function addTwo() external {
// this.OneExternal();
// }
function addThree() external {
super.OnePublic(); // super调用最近继承者合约的内部函数, +3
}
// function addFive() external {
// OnePublic(); //调用本合约的函数,+ 5
// }
function OnePublic() public virtual override {
//重写函数,修改函数逻辑
oneValue += 5;
}
//receive() external payable {}
}