External

external是合同的一部分,这意味着可以从其他合同和交易中调用它们。 外部方法f不能在内部调用(即f()不起作用,但this.f()起作用)。 外部方法在接收大量数据时有时更高效。

实现为合约的外部消息调用。所以在合约初始化时不能 external 的方式调用自身函数,因为合约还未初始化完成。

public

public 可以在内部或通过消息调用。 对于公共状态变量,会生成一个自动获取getter方法(下文)。

internal

internal 这些函数和状态变量只能在该合约内部进行访问。但是 继承的子类可以访问。

实现时转为简单的EVM跳转,所以它能直接使用上下文环境中的数据,对于引用传递时将会变得非常高效(不用拷贝数据)。

private

private 这些函数和状态变量只能在该合约内部进行访问。即使继承的子类也不能访问。

注意:

所有外部观察者都可以看到合约内的所有内容。private信息只会阻止其他合约访问和修改信息,但在区块链之外,整个世界仍然可以看到它。

Getter Functions

编译器自动为所有公共状态变量创建getter方法。 对于下面给出的合同,编译器将生成一个名为data的方法,该方法不接受任何参数并返回uint(状态变量数据的值)。 状态变量的初始化可以在声明中完成。

pragma solidity ^0.4.0;

contract C {
    uint public data = 42;
}

contract Caller {
    C c = new C();
    function f() public {
        uint local = c.data();
    }
}

results matching ""

    No results matching ""