Solidity
Solidity 中的抽象關鍵字和虛擬關鍵字有什麼區別?
Solidity 有關鍵字
abstract
和virtual
。有什麼不同?
abstract
andvirtual
關鍵字表示相關程式碼將在程式碼的其他地方實現或覆蓋。主要區別在於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 {} }