目录
前言
在Solidity中,修饰符是用于修改函数或状态变量的行为的关键元素之一。它们允许您在不改变函数或状态变量本身的情况下,添加额外的逻辑或约束条件。下面是Solidity中常见的修饰符以及它们的可见性和用法:
一、solidity修饰符包括什么?
solidity的修饰符包括:Public(公共)、External(外部)、Internal(内部)、Private(私有)、View 和 Pure。
二、具体用法
1.Public(公共)
- 可见性:任何人都可以调用。
- 用法:通常用于声明在合约外部可调用的函数。
代码如下(示例):
function publicFunction() public {
// 函数逻辑
}
2.External(外部)
- 可见性:只能从合约外部调用。
- 用法:通常用于节省gas,因为外部函数不会将调用者上下文的状态存储到堆栈中。
代码如下(示例):
function externalFunction() external {
// 函数逻辑
}
3.Internal(内部)
- 可见性:只能在当前合约内部或继承合约中调用。
- 用法:通常用于在合约内部实现重要的逻辑。
代码如下(示例):
function internalFunction() internal {
// 函数逻辑
}
4.Private(私有)
- 可见性:只能在当前合约内部调用。
- 用法:通常用于封装只能在合约内部使用的辅助函数。
function privateFunction() private {
// 函数逻辑
}
5.View 和 Pure
- 可见性:可以与任何可见性修饰符一起使用,用于声明函数不修改合约状态。
- 用法:通常用于读取状态或执行计算而不修改状态。
function viewFunction() public view {
// 读取状态但不修改
}function pureFunction() public pure {
// 不读取或修改状态
}
6.综合应用
这些修饰符可以组合使用,例如,一个函数可以同时具有public
和view
修饰符,表示它是一个公共的只读函数。
以下是一个示例合约,演示了这些修饰符的用法:
pragma solidity ^0.8.0;
contract Example {
uint256 public publicData;
uint256 internal internalData;
uint256 private privateData;constructor() {
publicData = 100;
internalData = 200;
privateData = 300;
}function externalFunction(uint256 _value) external {
// 可以调用
publicData = _value;
}function internalFunction(uint256 _value) internal {
// 可以调用
internalData = _value;
}function privateFunction(uint256 _value) private {
// 可以调用
privateData = _value;
}function getData() public view returns (uint256, uint256, uint256) {
// 可以读取,不修改状态
return (publicData, internalData, privateData);
}
}
在这个示例中,externalFunction
、internalFunction
和privateFunction
分别展示了不同可见性修饰符的用法。getData
函数展示了如何结合view
修饰符使用,以表明函数只读取状态而不修改它。
总结
1、private:能被继承、不能在外部调用、能在内部调用。
2、internal:能被继承、不能在外部调用、能在内部调用。
3、external:不能被继承、能在外部调用、不能在内部调用,可以通过“this”关键字强行调用
4、public:能被继承、能在外部调用、能在内部调用,它的权限最大。
5、pure:能读取全局变量、不能修改全局变量、不会消耗Gas。
7、view:能读取全局变量、不能修改全局变量、不会消耗Gas。