[区块链&DAPP介绍 Day13] Solidity 教学 - contracts-2

今天来聊聊关於 contracts 的继承

关於 contracts 其实它是支援多重继承,在这方面上是跟 python 是一样的,它是透过关键字 is 来选择要继承的对象。我们看看下面的范例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

// 这是父层的合约
contract A {
    function Name() public pure virtual returns (string memory) {
        return "A";
    }
}

//透过 is 的关键字 B 继承 A ,然後透过 ovverride 复写 Name()
contract B is A {
    function Name() public pure virtual override returns (string memory) {
        return "B";
    }
}

//跟上面一样 复写 Name()
contract C is A {
    function Name() public pure virtual override returns (string memory) {
        return "C";
    }
}

// 这个合约继承 B 跟 C ,但合约继承会从右边为继承,所以它的 override里面的对象,会针对c 也就是它的 super 层会回覆 c

contract D is B, C {
    //会回覆"C"
    function Name() public pure override(B, C) returns (string memory) {
        return super.foo();
    }
}

再来我们聊聊抽象合约,其实 solidity,有一个抽象合约的规格,我们看看下面范例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
// 这是抽象合约
abstract contract A {
    function Name() public pure virtual returns (string memory);
}
contract B is A {
    function Name() public pure override returns (string memory) {
        return "B";

    }
}

既然有 abstruct ,那就一定有 interface ,明天我们就来聊聊 interface。


<<:  EP09 - 建立 Django 专案和 EC2 环境 并手动部署到 EC2

>>:  分散式资料库:分散式理论

# Day28--让commit像战国时代一样分分合合

上一篇我们学到怎麽使用Vim,还有修改commit message,这次要做的事情呢,就是要来合并跟...

强人PM与敏捷相遇 -2

虽然想把这些敏捷有关的精神导入团队中,但自己仍不愿意对外说在执行敏捷的流程。其中一个最大的差异,是在...

django新手村3 -----models 一对多

资料库中的一对多如何在 django实现呢 先在app models.py 创建ClassRoom ...

DAY9: setImmediate 与 nextTick的比较

继上一篇的DAY8: process.nextTick(),今天要介绍新方法并相互比较。 setIm...

Day06. Blue Prism拯救贫穷大作战第一弹-汇入MS Excel VBO

Blue Prism拯救贫穷大作战第一弹-汇入MS Excel VBO 近期与之前工作的同事於lin...