界面与抽象合同在坚固性上的区别 [英] difference between interface and abstract contract in solidity

查看:0
本文介绍了界面与抽象合同在坚固性上的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习固定性,并了解到interfaceabstract都是可能包含未使用的函数的类。 我的疑问是:在可靠的智能合同中interfaceabstract contract有什么区别?

推荐答案

抽象类

如果合同的功能中至少有一个没有实现,则将其标识为抽象合同。这是抽象类的唯一要求。因此,它们不能被编译。但是,它们可以用作基础合同,其他合同可以从中继承。

  • 与其他语言不同,稳健合同不需要abstract关键字即可标记为摘要。相反,任何至少有一个未实现功能的合同都被视为坚固性的抽象。除非抽象合同具有正在执行的合同,否则它既不能编译也不能部署

    contract MyAbstractContract {
      function myAbstractFunction() public pure returns (string);
    }
    
  • 如果约定继承抽象约定,并且未实现所有未实现的功能,则该约定也将被视为抽象

     //MyContract is also abstract
      contract MyContract is MyAbstractContract {
          function myAbstractFunction() public pure returns (string)
     }
    

但这不是抽象的,因为我们正在实现该函数。

contract MyContract is MyAbstractContract {
        function myAbstractFunction() public pure returns (string)
         { return "string value to return"; }
    }
  • ANabstract contract既可以有已实现的函数,也可以有未实现的函数。

接口

接口只能有未实现的功能。此外,它们既不编译也不部署。

  • 接口不能实现它们的任何函数。所有接口函数都是隐式虚拟的
  • 使用关键字Interface定义接口。
  • 接口不能继承其他协定或接口,但其他协定可以从接口继承。
  • 接口不能定义构造函数
  • 接口不能有状态变量
  • 到目前为止,接口不能定义结构和枚举,但可能很快就会更改。

这篇关于界面与抽象合同在坚固性上的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆