Solidity
使用介面名稱作為變數類型
在solidity中,請參見下面的程式碼…..介面名稱如何用作變數類型?
請參閱下面程式碼中的註釋
pragma solidity 0.8.11; import "../interfaces/ISpool.sol"; // ... other imports abstract contract VaultBase is IVaultBase, VaultImmutable, SpoolOwnable, SpoolPausable, BaseConstants { using Bitwise for uint256; using SafeERC20 for IERC20; /* ========== STATE VARIABLES ========== */ /// @notice The central Spool contract ISpool internal immutable spool; // ISpool is interface name and it is // being used as variable type. What this means ? }
ISpool介面:
interface ISpool is ISpoolExternal, ISpoolReallocation, ISpoolDoHardWork, ISpoolStrategy, ISpoolBase {}
介面名稱如何用作變數類型?
讓我們看一下這個程式碼範例:
interface B{ function func() external; } contract A { B b; constructor(address contract_implements_b) public { b = B(contract_implements_b); } }
這裡有
interface B
,那裡有contract A
。
contract A
接收一個地址作為參數,這個地址指向另一個實現interface B
. 在我們初始化 b 之後,我們可以b.func()
在contract A
不知道我們得到的地址合約的完整 ABI 的情況下呼叫我們的。
你在這裡初始化一個變數:
ISpool internal immutable spool;
您正在描述該對
spool
像在內部可見並且它是只讀的。此外,它將具有ISpool
介面中指定的方法。