3.5 solidity 可见性和函数

作者: 9c0ddf06559c | 来源:发表于2018-09-26 19:41 被阅读5次

3.5 solidity 可见性和函数

  • 可见性

  • public

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

  • private

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

  • external

外部函数是合约接口的一- 部分,只能使用消息调用(this.xxx())(这就像是java中的成员方法,只能由对象调用,不能直接被调用,在solidity里没有对象的概念,只有消息的概念)

  • internal

函数和状态变量只能通过内部访问。如在当前合约中调用,或继承的合约里调用(类似于java中的protect)。状态变量默认的可见性是internal(状态变量就类似于java中的成员变量,属于某个对象(合约))

  • 函数

  • 构造函数

在合约创建的时候运行的函数,可以在里面做一些初始化的操作

contract Test{
uint internal data;
constructor(uint a) public {
data = a;
}
}
  • 视图函数(constant/view)

表示不会修改状态,constant和view是等价的,在新版中推荐优先使用view。
以下几种情况会被认为是修改了状态:

  • 触发了一个事件
  • 修改状态变量
  • 在函数里面创建了其他的合约
  • 纯函数(pure)

既不会修改状态也不会读取状态变量

  • 回退函数

当我们一个智能合约需要接受以太币的时候,我们就需要实现这样一个回退函数,他会被被动调用;
当我们调用了一个合约,但是没有匹配到函数的时候,就会调用回退函数。
这个回退函数可以写一些逻辑,但是尽量避免不要写复杂的逻辑。因为如果实现复杂的话,很容易引起发起交易的人由于发送的gas不够,而导致交易失败。
如果没有这个回退函数,就会报错。
并且回退函数 只能有一个。


image.png

相关文章

网友评论

    本文标题:3.5 solidity 可见性和函数

    本文链接:https://www.haomeiwen.com/subject/fpmjoftx.html