区块链:Solidity合约中属性和行为的访问权限
摘要:区块链 solidity属性的访问权限属性: 状态变量pragma solidity ^0.4.4;/*public >internal(这是合约属性默认的访问权限) >private */contract Person { uint internal _age; uint _weight;
属性的访问权限
属性: 状态变量
pragma solidity ^0.4.4;/*public >internal(这是合约属性默认的访问权限) >private */contract Person { uint internal _age; uint _weight; uint private _height; uint public _money; function _money() constant returns (uint) { return 120; }}
我们可以看见只有_money可以被访问到。public会自动生成getter方法。当我们重写getter方法时,重写方法的优先级会更高,会被优先调用。当然,生成的这个get函数会覆盖public类型的属性自动生成的get函数。
方法/行为访问权限方法/行为:合约里面的函数
pragma solidity ^0.4.4;contract Person { function age() constant returns (uint) { return 55; } function weight() constant returns (uint) { return 180; } function height() constant returns (uint) { return 172; } function money() constant returns (uint) { return 32000; }}
合约中的方法默认为public类型
pragma solidity ^0.4.4;contract Person { function age() constant returns (uint) { return 55; } function weight() constant public returns (uint) { return 180; } function height() constant internal returns (uint) { return 172; } function money() constant private returns (uint) { return 32000; }}
属性和方法在自己合约内部的访问权限总结pragma solidity ^0.4.4;/*public >internal(这是合约属性默认的访问权限) >private */contract Animal { uint _weight; uint private _height; uint internal _age; uint public _money; //public function test() constant public returns (uint) { return _weight; } function test1() constant public returns (uint) { return _height; } function test2() constant internal returns (uint) { return _age; } function test3() constant private returns (uint) { return _money; } function testInternal() constant public returns (uint) { return this.test(); } function testInternal1() constant public returns (uint) { return this.test1(); }/* 报错 如果使用函数指针进行访问,仅仅可以使用public修饰的 */ /* function testInternal2() constant public returns (uint) { return this.test2(); } */ function testInternal2() constant public returns (uint) { return test2(); }}
属性默认权限为internal,只有public类型的属性才可以供外部访问,internal和private类型的属性只能在合约内部使用。
函数的权限默认是public类型,public类型的函数可供外部访问,而internal和private类型的函数不能够通过指针进行访问,哪怕是在内部通过this访问都会报错,在合约内部访问,直接访问函数就可以了。
备注
不管是属性还是方法,只有是public类型时,才可以通过合约地址进行访问。合约内部的this就是当前合约的地址,在合约内部如果要访问internal和private类型的属性或者是函数,直接访问即可,不要试图通过this去访问。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。