函数的访问权限:
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,连返回都不行,只能读取局部变量,不能读取状态变量。