`

virtual

 
阅读更多
标记此函数可以被重写。只有标记为virtual的函数才可以重写(override)

pragma solidity >= 0.4.0 <0.9;
import "hardhat/console.sol";

contract IVirtual {
    function fun() public virtual m{
        console.log("virtual fun");
    }

    modifier m() virtual{
        console.log("virtual m()");
        _;
    }
}

contract Virtual is IVirtual{
    constructor(){
        super.fun();//这里的modifier实际会调用子类的m()
    }

    modifier m() override{
        console.log("local m()");
        _;
    }
    function fun() public override m{ //重载需要加override,并且权限得保持一致,不能上面public,下面external
        console.log("local fun");
    }
}

contract IVirtual2 {
    function fun() public virtual m{
        console.log("virtual2 fun");
    }

    modifier m() virtual{
        console.log("virtual2 m()");
        _;
    }
}

contract Virtual2 is IVirtual,IVirtual2 {
    constructor() m{

    }

    modifier m() override(IVirtual,IVirtual2){    //这里重载需要把2个父类显示写出
        console.log("Virtual2 m()");
        _;
    }

    function fun() public override(IVirtual,IVirtual2) m{ //重载需要加override,并且权限得保持一致,不能上面public,下面external
        console.log("local fun2");
    }
}




const { expect } = require("chai");
const { ethers } = require("hardhat");

constractName = "Virtual";
constractName2 = "Virtual2";
describe("contract", function () {
  it("test", async function () {
    const TestContract = await ethers.getContractFactory(constractName);
    const testContract = await TestContract.deploy();
    await testContract.fun();
    const TestContract2 = await ethers.getContractFactory(constractName2);
    const testContract2 = await TestContract2.deploy();
  });
});


  contract
local m()
virtual fun
local m()
local fun
Virtual2 m()
分享到:
评论

相关推荐

    virtuallab使用说明

    标题:“virtuallab使用说明” 指的是关于如何使用VirtualLab软件的手册。VirtualLab是一款由Wyrowski Photonics UG开发的仿真工具,主要应用于光子学领域的模拟与分析。该手册提供用户指南,帮助用户了解如何使用...

    VirtualXposed_0.20.2.apk

    VirtualXposed 是基于VirtualApp 和 epic 在非ROOT环境下运行Xposed模块的实现(支持5.0~10.0)。 与 Xposed 相比,目前 VirtualXposed 有两个限制: 不支持修改系统(可以修改普通APP中对系统API的调用),因此...

    KNX Virtual最新版本

    **KNX Virtual 最新版本详解** KNX Virtual 是一款强大的软件工具,专为模拟和测试KNX(欧洲建筑自动化标准)系统而设计。这个最新的版本提供了先进的功能和优化,使得专业人员和爱好者都能在不实际部署硬件的情况...

    Fabula_Virtual-Serial-Port-Kit.v5.5.1_Keygen.zip

    它跟Eltima VSPD(Virtual Serial Port Driver)的功能类似,厂商不同,Fabula公司的软件。这是当前最新版本,带注册机。http://www.fabulatech.com/virtual-serial-port-kit.html ,Create virtual serial ports and ...

    Virtual Serial Port Driver 7.2.308 + vspdctl.dll 激活

    Virtual Serial Port Driver 7.2.308 + vspdctl.... The applications can exchange data on virtual ports through virtual null-modem cable. The data sent from one port to another will be received momentarily.

    基于 MATLAB 2022b 新出的Virtual Vehicle Composer 搭建虚拟车辆模型.zip

    基于 MATLAB 2022b 新出的Virtual Vehicle Composer 搭建虚拟车辆模型.zip 基于 MATLAB 2022b 新出的Virtual Vehicle Composer 搭建虚拟车辆模型.zip 基于 MATLAB 2022b 新出的Virtual Vehicle Composer 搭建虚拟...

    VirtualApp源码(完整工程)

    VirtualApp是一款知名的安卓虚拟化应用,它允许用户在同一个设备上实现多个应用的并行运行,比如创建微信小号,实现安卓应用的双开或多开。这个完整的工程源码是基于Android Studio进行开发的,利用了NDK和SDK这两...

    virtual_audio_cable安装失败问题

    ### Virtual Audio Cable (VAC) 安装失败问题解析及解决方案 #### 一、问题概述 在尝试重新安装Virtual Audio Cable (简称VAC)时,遇到了安装失败的问题。这一问题通常发生在用户之前已经安装过VAC但未进行彻底卸载...

    virtual pc2007 win7 64位

    《虚拟机技术:Virtual PC 2007在Windows 7 64位系统中的应用》 在现代计算机技术中,虚拟化是一个重要的概念,它允许我们在一台物理机器上运行多个独立的操作系统实例,每个实例都有自己的资源分配,互不影响。...

    Enigma Virtual Box Unpacker v0.35

    《Enigma Virtual Box Unpacker v0.35:虚拟打包技术解析与应用》 Enigma Virtual Box Unpacker v0.35是一款专门用于处理Enigma Virtual Box打包的程序的工具。在深入探讨这个软件之前,我们首先需要理解Enigma ...

    Android代码-VirtualApp

    VirtualApp is an open platform for Android that allows you to create a Virtual Space, you can install and run apk inside. Beyond that, VirtualApp is also a Plugin Framework, the plugins running on ...

    LMS Virtual.Lab 11安装方法

    ### LMS Virtual.Lab 11 的安装方法与新特性详解 #### LMS Virtual.Lab 11 版本概述 LMS Virtual.Lab 11 是一款革命性的多物理场仿真软件,它不仅在声学领域有着显著的技术优势,而且还涵盖了广泛的分析功能,包括...

    JS虚拟键盘--VirtualKeyboard.371

    **JS虚拟键盘——VirtualKeyboard 3.7.1** 在网页开发中,有时为了提高用户交互体验或出于安全考虑(例如防止键盘记录器),开发者会选择使用JavaScript实现虚拟键盘。VirtualKeyboard 3.7.1是一款功能强大的jQuery...

    Virtual Audio Cable 4.14 完美去除“trail”女声 WIN11亲测可用

    Virtual Audio Cable(虚拟音频线缆)是一款在Windows操作系统中用于音频信号传输的工具。它创建了虚拟的音频输入和输出设备,使得多个音频应用程序能够同时共享音频流,这对于音视频处理、录音、直播或者测试音频...

    Virtual Audio Cable 4.10_VirtualAudioCable_

    Virtual Audio Cable(虚拟音频线缆)是一款在Windows操作系统上使用的软件工具,主要功能是为应用程序之间提供音频数据传输的桥梁。这款软件版本为4.10,标识为"VirtualAudioCable_4.10",它允许用户将音频流从一个...

    VirtualBreadboard/vjredist

    在编程和电子设计的世界里,VirtualBreadboard(简称VBB)是一款深受新手和经验丰富的开发者喜爱的工具。它提供了一个直观且易于理解的环境,模拟了Arduino的开发过程,使得用户无需物理面包板和元器件就能进行电路...

    Virtual Serial Port Driver Pro(虚拟串口工具)

    Virtual Serial Port Driver Pro(虚拟串口工具)是一款功能非常专业的虚拟串口辅助软件。最近课设需要用到这款软件,旧版本的win10用着好像有些兼容问题,于是到官网看看,发现已经更新到9.0版本了,还分为专业版和...

    VMware Virtual SAN 6.5管理手册

    VMware Virtual SAN(简称VSAN)是VMware公司推出的一款软件定义的存储解决方案,它是VMware vSphere的一部分,专为虚拟化环境设计,可以将服务器的本地存储资源(如硬盘和闪存)聚合在一起,形成一个高性能、可扩展...

    KNX Virtual-v250.zip

    【KNX Virtual-v250.zip】是一款专为学习和调试KNX系统设计的虚拟工具,它使得在没有实物设备的情况下也能进行KNX项目的配置和测试。KNX(欧洲建筑总线)是一种国际标准,广泛应用于智能建筑的控制系统,如智能照明...

    Eltima Virtual_Serial_Port_Driver_6.9

    Eltima Virtual Serial Port Driver 6.9 是一款专业级的虚拟串口软件,它能够创建虚拟的串行端口对,使得用户可以在没有物理串口或者需要模拟多个串口环境的情况下,进行串口通信。这款软件在各种工业自动化、嵌入式...

Global site tag (gtag.js) - Google Analytics