Solidity
多重繼承和線性化
大家好。我正在研究 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 中從左到右)搜尋給定的鹼基,在第一次匹配時停止. 如果已經搜尋了基本合約,則跳過它。