在C#里怎么重写已实现的接口

本文介绍了在C#中如何通过使用虚拟函数来重写已实现的接口。当基类实现了接口,而派生类需要不同实现时,可以通过将基类中的接口方法改为公共并调用一个受保护的虚拟方法来实现。具体做法是在基类中声明一个公共的Foo方法,调用受保护的虚拟方法FooImpl,并在派生类中重写FooImpl以达到重写接口的效果。
部署运行你感兴趣的模型镜像

本文通过虚拟函数来实现接口在继承类里的重写。实现语言为C#。


通常如果我们定义了一个接口如下:


interface IMyInterface

{

    void Foo(int i);

}


然后我们在类Base里实现了此接口,如下:


class MyClassBase

{

    protected void Foo(int i){  MessageBox.Show("The value of i is " + i.ToString()); }

    private void SomeOtherFun(){}

}


现在我们想在继承类里面重写Foo,也就是重新实现这个接口,但是C#不支持这样的接口重写,我们可以通过以下的方式来达到目标:


1. 更改MyClassBase如下:

class MyClassBase

{

    public void Foo(int i){ FooImple(i); }

    protected virtual void FooImpl(int i){ MessageBox.Show("The value of i is " + i.ToString()); }   

    private void SomeOtherFun(){}

}

从而继承类可以重写接口如下:


class MyChildClass : MyClassBase

{

    public virtual void FooImpl(int i){ MessageBox.Show("The value of i^2 is " + (i * i).ToString()); }   

}



您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值