【solidity】继承和调用权限(10)

Page content

这篇文章简单的整理了继承和调用权限相关的内容。

1.基本用法

pragma solidity ^0.4.0;

contract father {
    uint public money = 10000;

    function dahan() pure public returns(string) {
        return "dahan";
    }

}

contract son is father {

    function getMoney() view public returns(uint){
        return money; // 10000
    }

    function test() pure public returns(string) {
        return dahan(); // "dahan"
    }
}

2.连续继承

grandfather <- father <- son

pragma solidity ^0.4.0;

contract grandfather {
    uint public gudong = 200;

    function zhongdi() pure public returns(string){
        return "zhongdi";
    }
}

contract father is grandfather {
    uint public money = 10000;

    function dahan() pure public returns(string) {
        return "dahan";
    }

}

contract son is father {
    function getMoney() view public returns(uint){
        return money;
    }

    function test() pure public returns(string) {
        return dahan();
    }

    function getGudong() view public returns(uint){
        return gudong;
    }

}

3.public internal external private

pragma solidity ^0.4.0;

contract father {

    uint public money = 10000;

    // uint money = 10000;  不加上任何属性符 可以继承
    // uint internal money = 10000;  可以被继承

    // uint external money = 10000; 不能使用该符号
    // uint private money = 10000; 不能被继承


    // 不加符号,public, internal 可以被继承  external 必须要 this.danhan
    // private 不能被继承
    function dahan() pure public returns(string) {
        return "dahan";
    }

    // public 任何情况都可以调用
    // internal 只能是合约的内部调用 或是 继承合约的内部调用
    // external 只能是合约的外部调用 或是 继承合约的外部调用 
    //          可以用this.danhan() 这种方式在内部调用。因为this表示该合约,也是表示外部调用
    // private 只能是合约自己调用

}

contract son is father {

    function getMoney() view public returns(uint){
        return money;
    }

}

contract externalTest {
    // 创建合约以后,调用方法。 跟继承不一样的方式调用
    father f = new father();

    function externalTestIt() view public returns(string){
        return f.dahan();
    }
}

4.view pure payable

view和pure不会产生gas费用

view修饰符表示函数不会修改合约的状态,也不会向区块链发送任何交易。
它只是读取合约的状态并返回结果。

function getBalance() public view returns (uint) {
    return address(this).balance;
}

pure修饰符表示函数不会读取或修改合约的状态,也不会向区块链发送任何交易。
它只是执行计算并返回结果。

function add(uint a, uint b) public pure returns (uint) {
    return a + b;
}

payable 表示函数可以接收以太币作为参数,并将其存储到合约中。
在调用 payable 函数时,需要支付一定的 gas 费用,以便将以太币存储到合约中。


欢迎大家的意见和交流

email: li_mingxie@163.com