# 理解solidity可见性

By [XOF](https://paragraph.com/@xof-2) · 2022-03-31

---

> 一直认为solidity的官方文档很繁乱，从头到尾去读的话并不是由浅入深的感觉，一些地方也缺乏条理。不过不仅solidity，以太坊也是处在发展且快速成长的阶段，所以文档不成熟也是理所当然。我打算对我困惑，或者是觉得当下读文档很难理解透彻的地方做出一些梳理。

可见性与getter函数
------------

可见性用于修饰状态变量和函数，去声明他们的可见性，从而决定他们能否被外部访问等。

### 状态变量可见性

理解状态变量的可见性实际上应该先理解internal，再去了解另外两个和internal的区别。

`internal`

当定义一个状态变量时如果没有声明其可见性，则其默认的可见性就是internal。internal意味着该状态变量只能从合约内部访问（当前合约和该合约的派生合约，即继承该合约的合约）。

`private`

和internal的区别是当前合约的派生合约也无法访问到可见性为private的变量了。

`public`

和internal的区别是，编译器会为public的变量生成一个getter函数，这样其他外部合约也可以去访问该变量了。**当在同一个合约内时**，通过external（外部）的方式访问public变量的方法是`this.xxx` ，即通过getter函数来访问；通过internal（内部）的方式访问public变量的方法是`xxx` ，即直接通过变量从storage（存储）中进行访问。

---

*Originally published on [XOF](https://paragraph.com/@xof-2/solidity)*
