solidity 修饰符小节

214 阅读2分钟

函数的访问权限:

public 最大的访问权限,子类可以继承、可以访问,当前类能访问

private 仅限内部访问,子类不能继承、不能访问

internal 子类可以继承、可以访问,当前类可以访问

external 子类可以继承、可以访问,当前类不能访问

我们有决定函数何时和被谁调用的可见性修饰符: private 意味着它只能被合约内部调用; internal 就像 private 但是也能被继承的合约调用; external 只能从合约外部调用;internal 只能从合约继承的内部调用;最后 public 可以在任何地方调用,不管是内部还是外部。

在使用is 继承合约后。

virtual 父合约的函数使用表示,在子继承中可以被修改的 没有这个参数就不能被修改, override 在子继承中 表示覆盖原来的函数,

contract A{
    function a() public pure virtual returns ( string memory){
        retrun "a";
    }
}

contract B is A{
    function a() public pure override returns ( string memory){
    retrun "a";
}

    function b() public pure returns ( string memory){
        retrun "b";
    }
}

view 对状态变量只读,这里的状态变量还包含区块链的内建对象数据、时间戳等

pure 既不修改,也不读取状态变量的值

我们也有状态修饰符, 告诉我们函数如何和区块链交互: view 告诉我们运行这个函数不会更改和保存任何数据; pure 告诉我们这个函数不但不会往区块链写数据,它甚至不从区块链读取数据。这两种在被从合约外部调用的时候都不花费任何gas(但是它们在被内部其他函数调用的时候将会耗费gas)。

view和pure的区别在于

1、View 允许返回与查看,可以读取局部变量和状态变量;

2、Pure,连返回都不行,只能读取局部变量,不能读取状态变量。