在下面的代码中,Solidity会报错:“Linearization of inheritance graph impossible”。
// 以下代码无法编译
pragma solidity >=0.4.0 <0.7.0;
contract X {}
contract A is X {}
contract C is A, X {}
原因是C
要求X
来重写A
(定义A
,X
这个顺序),但A
本身的要求重写X
,这是一个矛盾,不能解决。
多继承和线性化(Multiple Inheritance and Linearization)。Solidity是沿用Python的方式, 使用C3线性化,在基类的DAG强制使用特定的顺序。这导致单调但不允许某些继承关系。特别是,在is
指令中给出父类的顺序很重要。
一个简单的规则是要指定父类中的顺序从左到右为“most base-like”到“most derived”。