Solidity
如何在 Solidity 0.6 及更高版本中正確定義介面?
solidity 0.5的重大變化之一是強制要求明確的函式可見性,因此所有介面函式都必須定義為
external
今天。在solidity 0.6 中,似乎引入了兩個新的函式修飾符:
virtual
和override
.它們如何與之前的介面函式規則重疊?
回答
有兩個新規則需要注意:
- 所有介面函式都是隱式的
virtual
。如果您想明確說明,編譯器會拋出警告。- 從介面繼承的所有函式都必須
override
在每個覆蓋介面函式的函式上設置修飾符,以免編譯器拋出錯誤。例子
試著看看如果你添加
virtual
或刪除會發生什麼override
:interface MyInterface { function getBlockNumber() external view returns (uint256); } contract MyContract is MyInterface { function getBlockNumber() public view override returns (uint256) { return block.number; } }
更多文件
請注意,
virtual
andoverride
修飾符不僅適用於介面。我建議在另一個執行緒和solidity 0.6 重大更改文件中閱讀更多關於它們的資訊。