首页 > 区块链 > 区块链:Solidity合约中属性和行为的访问权限
拉十多个  

区块链: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;  }}
区块链:Solidity合约中属性和行为的访问权限

我们可以看见只有_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;  }}
区块链:Solidity合约中属性和行为的访问权限

合约中的方法默认为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;  }}
区块链:Solidity合约中属性和行为的访问权限

属性和方法在自己合约内部的访问权限总结
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。