本文主要是介绍Solidity状态变量的可见性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Solidity的状态变量,有private、public这2种,其中private表示私有,在本合约里可见;public表示公有,在本合约、以及它的子合约都可见。
如果一个状态变量,既没有被private修饰、也没有被public修饰,则它默认是私有的。
uint _value; <==> uint private _value; //这2者等价。
比如,EventValue.sol合约与 EthValue.sol合约
//EventValue.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;contract EventValue {event ValueChanged(address indexed author,uint oldValue,uint newValue);uint _value; //没有修饰符,默认为私有,不能继承constructor(uint value) public {uint tmp = _value;_value = value;emit ValueChanged(msg.sender, tmp, value);}function getValue() view public returns (uint) {return _value;}function setValue(uint value) public {uint tmp = _value;_value = value;emit ValueChanged(msg.sender, tmp, value);}
}
//EthValue.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;contract EventValue {event ValueChanged(address indexed author,uint oldValue,uint newValue);uint public _value; //修饰符为public,表示公钥,可以继承constructor(uint value) public {uint tmp = _value;_value = value;emit ValueChanged(msg.sender, tmp, value);}function getValue() view public returns (uint) {return _value;}function setValue(uint value) public {uint tmp = _value;_value = value;emit ValueChanged(msg.sender, tmp, value);}
}
在EventValue.sol中,_value是私有变量,是不可见的,它没有属性按钮,如图(1)所示;但在EthValue.sol中,_value是公有变量,是可见的,所以它有属性按钮,如图(2)所示。
注意,这个可见性指定的是父子合约之间的访问权限,不是矿工或者用户的访问权限。无论是私有变量,还是公有变量,它们都存在Storage里,可以通过读取变量所在的插槽位置,来读取它的值
这篇关于Solidity状态变量的可见性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!