Ethereum-Solidity 测验 Q17:Solidity 使用哪些可见性修饰符?
发布: (2026年1月10日 GMT+8 19:34)
2 min read
原文: Dev.to
Source: Dev.to
可见性修饰符概览
| 修饰符 | 合约内部 | 派生合约 | 其他合约 | 外部 |
|---|---|---|---|---|
| public | ✅ | ✅ | ✅ | ✅ |
| internal | ✅ | ✅ | ❌ | ❌ |
| private | ✅ | ❌ | ❌ | ❌ |
| external | ❌ (via this) | ❌ | ✅ | ✅ |
Solidity 使用四种可见性修饰符来控制函数和状态变量的访问方式:
- public – 可以在合约内部、其他合约以及外部调用。
- external – 可以在其他合约和外部调用;不能在同一合约内部直接调用(除非通过
this)。 - internal – 可以在同一合约及其派生合约(继承)中调用;不能在其他合约或外部调用。
- private – 只能在同一合约内部调用;不能在派生合约、其他合约或外部调用。
重要说明
- 状态变量可以是 public、internal 或 private(不能是
external)。 - 函数可以是 public、internal、private 或 external。
public状态变量会自动生成 getter 函数。external函数比public更省 gas,因为它们不创建内部函数副本。private和internal并不提供安全性;区块链数据始终是可见的,它们仅限制函数调用的访问方式。- 对于需要从合约外部调用的函数,请使用
external。 - 对于通过继承使用的辅助函数,请使用
internal。 - 使用
private时需谨慎——通常仅用于内部辅助函数。 - 对于需要公开访问的状态变量,请使用
public。 - 请记住,
private并不提供安全性,它仅防止意外调用。