首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多基构造函数的多重继承与链化顺序

多基构造函数的多重继承与链化顺序
EN

Ethereum用户
提问于 2018-03-30 22:57:25
回答 1查看 2.4K关注 0票数 5

我试图理解在存在多重继承的情况下基类构造函数的调用顺序。据我所知,在下面的坚实文档中,顺序如下所示:

http://solidity.readthedocs.io/en/develop/contracts.html#arguments-for-base-constructors http://solidity.readthedocs.io/en/develop/contracts.html#multiple-inheritance-and-linearization

我还讨论了Stackexchange中的相关问题,但它们没有使用链接多个基本构造函数来解决这个问题。

我从Remix的理解是,基构造函数的调用顺序取决于派生契约的继承顺序,而不依赖于构造函数中的顺序。例如,在以下两种情况下,B的构造函数在C之前调用。

代码语言:javascript
复制
contract B {
    function B() public {emit PrintB();}
    event PrintB();
}

contract C {
    function C() public {emit PrintC();}
    event PrintC();
}

contract D is B, C {
    function D() C() B() {}
}

contract E is B, C {
    function E() B() C() {}
}

有人能确认我的理解是否正确吗?

如果我的理解确实是正确的,那么它是记录在稳健规范中,还是仅仅是当前实现的一个特性,并可能在将来发生变化。

谢谢你的帮忙!

EN

回答 1

Ethereum用户

发布于 2018-03-30 23:45:11

是的,你的理解是正确的。正如您链接到的文档中所指出的,Solidity遵循C3线性化,其中执行顺序由契约级的声明顺序决定,与从构造函数签名中调用/传递参数的顺序无关。

Solidity遵循Python的路径,并使用“C3线性化”来强制基类DAG中的特定顺序。这导致了理想的单调性性质,但不允许某些继承图。特别是,在is指令中给出基类的顺序是很重要的。

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/44343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档