Solidity

Solidity 中的抽象關鍵字和虛擬關鍵字有什麼區別?

  • January 13, 2021

Solidity 有關鍵字abstractvirtual。有什麼不同?

abstractandvirtual關鍵字表示相關程式碼將在程式碼的其他地方實現或覆蓋。主要區別在於abstract適用於契約virtual適用於功能

關鍵字的目的abstract是將契約的定義與其實現分離,提供更好的可擴展性和自我文件化,並促進有用的模式。抽象契約的用處與在介面中定義方法的用處相同。這是抽象合約的設計者說“我的任何孩子都必須實現這個方法”的一種方式。

關鍵字的目的virtual是在重寫函式時更加明確。如果基函式被標記為虛擬,則可以通過繼承合約來更改它們的行為來覆蓋基本函式。然後,覆蓋函式必須在函式頭中使用 override 關鍵字。您可以在此處virtual閱讀有關和的更多詳細資訊。override

抽象範例(來自 Solidity Docs)

pragma solidity ^0.6.0;

abstract contract Feline {
   function utterance() public virtual returns (bytes32);
}

contract Cat is Feline {
   function utterance() public override returns (bytes32) { return "miaow"; }
}

虛擬範例(來自 Solidity 文件)

pragma solidity >=0.5.0 <0.7.0;

contract Base {
   function foo() virtual public {}
}

contract Middle is Base {}

contract Inherited is Middle {
   function foo() public override {}
}

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