理解solidity可见性

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

可见性与getter函数

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

状态变量可见性

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

internal

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

private

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

public

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