Solidity 可见性修饰符

发布于 2024-10-11 19:57:48 字数 903 浏览 7 评论 0

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();
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

浊酒尽余欢

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

lee_heart

文章 0 评论 0

往事如风

文章 0 评论 0

春风十里

文章 0 评论 0

纸短情长

文章 0 评论 0

qq_pdEUFz

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文