Solidity

如何在 Solidity 0.6 及更高版本中正確定義介面?

  • March 31, 2022

solidity 0.5的重大變化之一是強制要求明確的函式可見性,因此所有介面函式都必須定義為external今天。

在solidity 0.6 中,似乎引入了兩個新的函式修飾符:virtualoverride.

它們如何與之前的介面函式規則重疊?

回答

有兩個新規則需要注意:

  1. 所有介面函式都是隱式的virtual。如果您想明確說明,編譯器會拋出警告。
  2. 從介面繼承的所有函式都必須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;
   }
}

更多文件

請注意,virtualandoverride修飾符不僅適用於介面。我建議在另一個執行緒solidity 0.6 重大更改文件中閱讀更多關於它們的資訊。

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