Solidity基础(6)--Solidity合约访问权限问题

本章节主要讲述智能合约中访问权限问题,主要关键字external,public,internal,private之间的区别及应用


external:
外部函数是合约接口的一部分,所以我们可以从其它合约或通过交易来发起调用。一个外部函数f,不能通过内部的方式来发起调用,(如f()不可以,但可以通过this.f())。外部函数在接收大的数组数据时更加有效。

public:
公开函数是合约接口的一部分,可以通过内部,或者消息来进行调用。对于public类型的状态变量,会自动创建一个访问器。

internal
这样声明的函数和状态变量只能通过内部访问。如在当前合约中调用,或继承的合约里调用。需要注意的是不能加前缀this,前缀this是表示通过外部方式访问。

private
私有函数和状态变量仅在当前合约中可以访问,在继承的合约内,不可访问。

这里的权限只是表示合约与合约之间,对于任何观察者来说这些都是可见的

几种默认状态

1.状态变量

 pragma solidity ^0.4.0;

 contract HelloWorld{
    uint a;
    uint internal b;
    uint private c;
    uint public d;

    function d() constant returns(uint){
        return 123;
    }
 }

状态变量默认类型为internalinternalprivate类型的变量不能被外部访问,变量类型为public时,会生成一个和变量名相同的带返回值的函数例如上面例子中的d
注意:函数d()的优先级大于变量d,例如上面例子中d的返回值为123

2.方法/函数

 pragma solidity ^0.4.0;

 contract HelloWorld{
    function a() constant returns(uint){
        return 123;
    }
 }

合约中的方法默认为public类型

3.继承的情况

子合约可以访问public ,internal,无法访问private类型

你可能感兴趣的:(solidity)