Solidity

多重繼承和線性化

  • August 29, 2021

大家好。我正在研究 Solidity 中的多重繼承。我在他們的文件中遇到了這個例子,但這對我來說是不夠理解的。

有人可以更詳細地解釋這句話:

這樣做的原因是C請求X覆蓋A(通過指定A,X的順序),但A本身請求覆蓋X,這是一個無法解決的矛盾。

我的問題是為什麼 C 要求 X 覆蓋 A,即這種繼承順序究竟意味著什麼?

   pragma solidity ^0.4.0;

    contract X {}
    contract A is X {}
    contract C is A, X {}

經過研究我發現:

對於多重繼承,鑽石問題會導致問題。Solidity 像 Python 一樣解決了這個問題。

以下是詳細描述此問題的兩個連結: https ://docs.python.org/2/tutorial/classes.html#instance-objects https://www.python.org/download/releases/2.3/mro/

因此,為了避免鑽石問題,繼承順序很重要。順序應該是:從頂層繼承的類到低層的類

在關於多重繼承和線性化的可靠性文件中得到了最好的解釋:

您必須按照從“最基礎”到“最衍生”的順序列出直接基礎合約。請注意,此順序與 Python 中使用的順序相反。

解釋這一點的另一種簡化方法是,當呼叫在不同合約中多次定義的函式時,以深度優先的方式從右到左(在 Python 中從左到右)搜尋給定的鹼基,在第一次匹配時停止. 如果已經搜尋了基本合約,則跳過它。

引用自:https://ethereum.stackexchange.com/questions/21060