在solidity继承中,为什么G和H的结果都是“C”?

问题描述 投票:0回答:0
contract A {
    function foo() public pure virtual returns(string memory) {
        return "A";
    }
}

contract B is A {
    function foo() public pure virtual override returns(string memory) {
        return "B";
    }
}
contract C is A {
    function foo() public pure virtual override returns(string memory) {
        return "C";
    }
}
contract D is B, C {
    function foo() public pure virtual override(B, C) returns(string memory) {
        return super.foo();
    }
}
contract F is A, B {
    function foo() public pure virtual override(A, B) returns(string memory) {
        return super.foo();
    }
}
// test G,result is "C"
contract G is D, F {
    function foo() public pure virtual override(D, F) returns(string memory) {
        return super.foo();
    }
}
contract H is F, D {
    function foo() public pure virtual override(F, D) returns(string memory) {
        return super.foo();
    }
}

为什么G和H的结果都是“C”?

规则:

// 合约可以继承自多个父合约。

// 当一个函数被调用时在

中定义了多次

// 不同合约,父合约从中查找

// 从右到左,深度优先。

那么为什么 G 不是“B”?

solidity
© www.soinside.com 2019 - 2024. All rights reserved.