接口

2022-05-16 10:49 更新

接口類(lèi)似于抽象合約,但它們不能實(shí)現(xiàn)任何功能。還有更多限制:

  • 它們不能從其他合約繼承,但可以從其他接口繼承。
  • 所有聲明的函數(shù)在接口中必須是外部的,即使它們?cè)诤霞s中是公共的。
  • 他們不能聲明構(gòu)造函數(shù)。
  • 他們不能聲明狀態(tài)變量。
  • 他們不能聲明修飾符。

未來(lái)可能會(huì)取消其中一些限制。

接口基本上僅限于 Contract ABI 可以表示的內(nèi)容,ABI 和接口之間的轉(zhuǎn)換應(yīng)該是可能的,不會(huì)有任何信息丟失。

接口由它們自己的關(guān)鍵字表示:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.6.2 <0.9.0;

interface Token {
    enum TokenType { Fungible, NonFungible }
    struct Coin { string obverse; string reverse; }
    function transfer(address recipient, uint amount) external;
}

合約可以像繼承其他合約一樣繼承接口。

接口中聲明的所有函數(shù)都是隱式聲明的virtual,任何覆蓋它們的函數(shù)都不需要override關(guān)鍵字。這并不自動(dòng)意味著一個(gè)覆蓋函數(shù)可以再次被覆蓋——這只有在覆蓋函數(shù)被標(biāo)記的情況下才有可能virtual。

接口可以從其他接口繼承。這與普通繼承具有相同的規(guī)則。

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.6.2 <0.9.0;

interface ParentA {
    function test() external returns (uint256);
}

interface ParentB {
    function test() external returns (uint256);
}

interface SubInterface is ParentA, ParentB {
    // Must redefine test in order to assert that the parent
    // meanings are compatible.
    function test() external override(ParentA, ParentB) returns (uint256);
}

在接口和其他類(lèi)似合約的結(jié)構(gòu)中定義的類(lèi)型可以從其他合約訪問(wèn):Token.TokenType或Token.Coin.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)