Solidity

抽象合約有什麼好處?

  • April 13, 2022

我見過類似的問題,但沒有人回答為什麼人們使用抽象契約。我來自非 OOP JavaScript 背景,所以我在理解這些事情時有些困難。

文件

pragma solidity ^0.4.0;
contract Feline {
   function utterance() public returns (bytes32);
}
contract Cat is Feline {
   function utterance() public returns (bytes32) { return "miaow"; }
}

Feline首先在這裡定義有什麼好處?我能想到的唯一好處是,如果您有許多不同類型的feline契約,並且您想確保它們都包括utterance()我猜?但我真的想不出任何這樣的情況……

有沒有我看不到的好處?從我的背景來看,你會想要避免這樣的事情,你只想要一個香蕉,但讓一隻大猩猩拿著它,以及整個叢林……

PS:問題不在於介面和抽象合約之間的區別。

您不必被迫創建和抽象合約來執行實現。Solidity 不是一種強 OOP 語言,即使某些東西是從 OOP 派生的(介面、繼承、抽象契約)。

所以說抽象契約會給你另一個抽象層次,使用它的主要原因是確保誰實現契約將遵循它的定義(正如你在你的文章中描述的那樣)並為子契約提供通用功能。

你可以在 stackoverflow 上找到很多描述好處的文章。例如這里這裡

從這些文章之一:

如果您想為您的孩子提供實現細節但又不想讓您的類的實例被直接實例化(這允許您部分定義一個類),那麼抽像類非常適合。

抽象方法的用處與在介面中定義方法的用處相同。這是抽像類的設計者說“我的任何孩子都必須實現這個方法”的一種方式。

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