Inheritance
在 Solidity 中,當存在繼承時,插槽分配如何用於儲存變數?
在一個簡單的solidity合約中,沒有繼承,儲存變數從slot 0開始按順序分配。
但是在繼承的情況下,被繼承的變數出現在之前還是之後呢?
賦值如下:首先到繼承的變數,從最左邊的合約到最右邊,最後以你所在的目前合約結束。
在以下範例中,
C
繼承自Base
andBase2
,按此順序。插槽分配將從 開始Base
,跟隨Base2
,最後C
。pragma solidity ^0.5; contract Base { uint256 basevar = 0; constructor() public { basevar = 1; } } contract Base2 { uint256 basevar2 = 2; constructor() public { basevar2 = 1; } } contract C is Base, Base2 { uint256 cvar = 0; function getCvar() public view returns(uint256) { return cvar; } function getBasevar () public view returns(uint256) { return basevar; } }
basevar
分配槽 0,basevar2
分配槽 1,cvar
分配槽 2。