Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 70.6MB ·虚拟内存 1300.5MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
Solidity 多重继承的构造函数有两种形式:
如果我们已经知道基类初始化参数,那么就可以在派生类的继承声明中,直接传递参数给基类的构造函数。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract X { string public name; constructor(string memory _name) { name = _name; } } contract Y { string public value; constructor(string memory _value) { value = _value; } } // 派生类的继承声明中,直接传递参数给基类的构造函数 contract Z is X("n"),Y("v") { }
如果我们需要在部署时或者运行时,由调用方传递基类初始化参数。在这种情况下,我们需要编写一个新的构造函数,传递参数给基类。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract X { string public name; constructor(string memory _name) { name = _name; } } contract Y { string public value; constructor(string memory _value) { value = _value; } } // 编写一个新的构造函数,传递参数给基类 contract Z is X,Y { constructor(string memory _name, string memory _value) X(_name) Y(_value){ } }
我们可以同时使用上面的两种方式,定义和部署时,分别传递参数给基类的构造函数。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract X { string public name; constructor(string memory _name) { name = _name; } } contract Y { string public value; constructor(string memory _value) { value = _value; } } // 混写方式 contract Z is X("n"),Y { constructor(string memory _value) Y(_value){ } }
多重继承中,构造函数的执行会按照定义时的继承顺序进行,与构造函数中定义顺序无关。
例如:
contract Z is X,Y { // 会按照继承顺序X,Y,先执行X的构造函数,再执行Y的构造函数,最后执行Z的构造函数 constructor() Y("v"), X("n"){ // 先运行 X("n"),再运行 Y("v") } }
Solidity 派生类调用父类函数有两种方法:使用父级合约名称调用使用super调用使用父级合约名称调用使用父级合约名称调用,格式为:<parent contract>.<method&g ...