Solidity 可见性修饰符
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 技术交流群。
上一篇: Solidity Function 方法
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论