版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wtdask/article/details/81947743
属性的访问权限
属性: 状态变量
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去访问。