访问控制public, internal 、 private等。
2018-05-24 17:59
323 查看
方法可以有4个可见性: external, public, internal 、 private。 默认是private。
状态变量有3个可见性:public, internal 、 private。默认是 internal。
消息调用:在其他合约中new一个合约,或者加载一个合约。调用被加载合约的方法。(也就是通过一个合约调用另一个合约)
external:只能修饰方法。
external 的方法可以从其他合同和交易中调用。不能在内部调用(即f()不起作用,但this.f()可以)。外部函数在接收大的array有时更高效。
public:可以修饰状态变量和方法
Public 方法可以从内部调用,也可以通过消息调用.
public 状态变量会自动生成一个getter方法 .
internal:
internal的方法和状态变量只能合约内部调用 (只能当前合约调用,或者继承的合约调用), 不能使用this调用.
private:
private的方法和状态变量,只能定义的合约可见,继承的合约也不可见。
本文是官方文档的翻译理解:
https://solidity.readthedocs.io/en/v0.4.24/contracts.html?highlight=visibility
状态变量有3个可见性:public, internal 、 private。默认是 internal。
消息调用:在其他合约中new一个合约,或者加载一个合约。调用被加载合约的方法。(也就是通过一个合约调用另一个合约)
external:只能修饰方法。
external 的方法可以从其他合同和交易中调用。不能在内部调用(即f()不起作用,但this.f()可以)。外部函数在接收大的array有时更高效。
public:可以修饰状态变量和方法
Public 方法可以从内部调用,也可以通过消息调用.
public 状态变量会自动生成一个getter方法 .
internal:
internal的方法和状态变量只能合约内部调用 (只能当前合约调用,或者继承的合约调用), 不能使用this调用.
private:
private的方法和状态变量,只能定义的合约可见,继承的合约也不可见。
pragma solidity ^0.4.0; contract C { uint private data; function f(uint a) private returns(uint b) { return a + 1; } function setData(uint a) public { data = a; } function getData() public returns(uint) { return data; } function compute(uint a, uint b) internal returns (uint) { return a+b; } } contract D { function readData() public { C c = new C(); uint local = c.f(7); // 错误:private的方法只能定义它的合约能使用 c.setData(3); local = c.getData(); local = c.compute(3, 5); //错误:internal的方法只能定义它的合约或者 继承他的合约,能调用 } } contract E is C { function g() public { C c = new C(); uint val = compute(3, 5); // 继承的合约,能使用父合约的 internal成员 } }
本文是官方文档的翻译理解:
https://solidity.readthedocs.io/en/v0.4.24/contracts.html?highlight=visibility
相关文章推荐
- 2.Swift - 访问控制(private,internal,public)
- Swift - 访问控制private,internal,public 三种类型
- C# 访问控制:public、private、protected和internal
- Swift - 访问控制(fileprivate,private,internal,public,open)
- Swift - 访问控制(fileprivate,private,internal,public,open)
- Swift - 访问控制(fileprivate,private,internal,public,open) 2015-01-13发布:hangge阅读:16010 在 Swift 语言中,访问修饰符
- Swift - 访问控制(private,internal,public)
- Swift学习之 - 访问控制权限(fileprivate,private,internal,public,open)
- Swift - 访问控制(fileprivate,private,internal,public,open)
- swift 中的访问控制关键字 open, public, internal, fileprivate, private
- Swift-Swift - 访问控制(private,internal,public)
- Swift - 访问控制(fileprivate,private,internal,public,open)
- Swift - 访问控制(fileprivate,private,internal,public,open)
- Swift 的访问控制(private,internal,public)
- Swift - 访问控制(private,internal,public)
- Swift - 访问控制(private,internal,public)
- Swift - 访问控制(fileprivate,private,internal,public,open)
- Swift - 访问控制(private,internal,public)
- 访问控制(fileprivate,private,internal,public,open)
- Swift - 访问控制(private,internal,public)