属性:默认是internal的类型,外部是不可以访问调用的,如果加上public的话,那么是会自动为这个属性加上一个get的方法的,比如uint public _age; => function _age() {} 自动生成
方法:默认是public的类型,外部是可以直接访问调用的
public:,不管是属性还是方法都可以通过合约地址的形式来进行访问,this.xxxxx()的形式,public属性:_age(),public方法:tets2()
internal,private:,就不用加this,直接访问,如果是属性的话,就直接属性age就可以了,如果是方法的话,那么就test2()就可以了,不用加this,指针的形式来访问(合约地址的形式)
pragma solidity ^0.4.4; //internal默认是合约内部的访问权限 //internl和private外部都是不能访问的 uint _age;//现在外部是访问这个_age的,默认的是internal,内部访问 uint public _weight;//这个会自动生成一个get函数,public,可以被调用,在页面可以看到_weight方法(实际上是一个get方法) // public,当属性的类型是public的时候,会生成一个和属性名相同的并且返回值就是当前属性的get函数 //下面的方法把上面public自动生成的get函数给覆盖掉了 function _weight() constant returns(uint){ return 111;//返回的是状态变量,调用_weight返回的是111 } }
//如果想用合约的指针去访问的话,只能是public的类型 pragma solidity ^0.4.13; contract Person { uint _age;//默认是internal的类型 uint public _weight;//会自动生成一个_weight的get函数 uint private _money; function test() constant public returns (uint) { return _age; } function test2() constant internal returns(uint){ return _age; } function get() contract returns(uint) { this._weight();//_weight会自动生成一个_weight的get函数,所以是可以通过this来进行访问的,但是_money是private的类型,所以是不能通过这个this指针的形式来进行访问的,否则会报错 return this.test();//因为test方法是public的类型,所以是可以访问调用的 //this就是当前的合约地址,如果是internal的类型的话,不能通过this来进行访问 //如果要访问internal的方法类型的时候,直接把this去掉,就是test()() } function get2() constant returns(uint){ return test2();//tets2是internal的方法类型,所以是不用加上this直接进行访问的 //注明:如果是intrnal,private的类型的时候,是不可以通过指针进行访问的,在合约内部访问都会报错,加指针的话 } }
属性默认是internal的类型,是不会自动生成属性的get函数的,如果是public的话,那么会自动生成这个属性的get函数,可以被调用
方法默认是public的类型
如果内部访问public的类型,不管是方法还是属性的话,可以通过this.xx(),的形式(合约地址的形式)来访问,如果是internal,private是不可以通过这种方式来访问的,直接属性,或者方法()就可以访问
原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10663963.html
时间: 2024-11-02 19:55:28