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类型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值