Solidity继承的语法

假设你有一个基本合约 a,你想创建一个新的合约 b,它继承自 a。这可以通过使用is关键字实现。

继承例子

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

contract BaseContract {
  // 父合约的成员变量和方法
  string name = "hello";

  function getNane() external view   returns (string memory){
    return name;
  }
}

contract DerivedContract is BaseContract {  
  // 部署这个合约,则可以,调用BaseContract的方法

}

多重继承

当你使用多重继承时,需要列出所有父合约,使用 , 隔开。

父合约是按照它们被列出的顺序被继承的,这个顺序可以影响到函数解析以及父合约构造函数的调用顺序

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

contract A {
    uint256 count;

    function getCount() public view returns (uint256) {
        return count;
    }
}

contract B {
    uint256 value;

    function getValue() public view returns (uint256) {
        return value;
    }
}

contract Name is A, B {}

继承后, 带构造方法的类

当你继承一个包含构造函数的合约时,你需要确保所有父合约的构造函数都被正确地调用并初始化。

Solidity提供了几种方式来实现这一点:

1. 在继承列表中指定父合约构造函数的参数。

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

contract A {
    uint256 count;

    function getCount() public view returns (uint256) {
        return count;
    }

    constructor(uint256 _co) {
        count = _co;
    }
}

contract B {
    uint256 value;

    function getValue() public view returns (uint256) {
        return value;
    }

    constructor(uint256 _co) {
        value = _co;
    }
}

contract Name is A(100), B(200) {

}

2. 直接在子合约的构造函数,调用父合约的构造函数 - 外部传入方式

继承多合约例子 的构造方法, -外部传入

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

contract A {
    uint256 count;

    function getCount() public view returns (uint256) {
        return count;
    }

    constructor(uint256 _co) {
        count = _co;
    }
}

contract B {
    uint256 value;

    function getValue() public view returns (uint256) {
        return value;
    }

    constructor(uint256 _co) {
        value = _co;
    }
}

contract Name is A, B {
    constructor(uint256 _a, uint256 _b) A(_a) B(_b) {

    }
}

猜你喜欢

转载自blog.csdn.net/suannai11/article/details/140821030