You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为抽象基类的抽象方法实现显式继承?

在C#中模拟抽象类的“显式实现”效果

在C#中,接口支持显式实现——这类方法仅能通过对应接口类型访问,派生类还可以定义同名同参但返回值不同的方法。但对于包含字段、无法改为接口的抽象类,直接尝试覆盖抽象方法后定义同名方法会触发编译错误,因为C#不允许仅靠返回值差异来重载方法。以下是两种可行的解决方案:

方案一:使用new关键字隐藏基类方法

通过new关键字标记派生类的同名方法,明确告知编译器这是隐藏基类方法而非重载,既能绕过返回值不同的编译限制,也能实现类似接口显式实现的效果:

代码示例

抽象类定义:

public abstract class Foo
{
    public abstract void DoSomething();
}

派生类的正确实现:

public class Bar : Foo
{
    // 实现抽象类的抽象方法,仅能通过Foo基类类型访问
    public override void DoSomething()
        => throw new NotImplementedException("Ha ha! Tricked you! I don't do anything!");

    // 用new关键字隐藏基类方法,通过Bar派生类类型访问时会调用此版本
    public new int DoSomething()
        => throw new Exception("I tricked you again! I do do something! I throw exceptions!");
}

效果验证

Foo foo = new Bar();
foo.DoSomething(); // 调用override的void版本,抛出NotImplementedException

Bar bar = new Bar();
bar.DoSomething(); // 调用new的int版本,抛出Exception

方案二:抽象类实现接口,派生类显式实现接口

如果希望更贴近接口显式实现的语义,可以先定义对应接口,让抽象类实现该接口并将接口方法声明为抽象,再让派生类显式实现接口方法,同时定义自己的同名方法:

代码示例

定义接口与抽象类:

public interface IFoo
{
    void DoSomething();
}

public abstract class Foo : IFoo
{
    // 抽象类将接口方法声明为抽象,强制派生类实现
    public abstract void DoSomething();
}

派生类实现:

public class Bar : Foo, IFoo
{
    // 显式实现接口方法,仅能通过IFoo接口类型访问
    void IFoo.DoSomething()
        => throw new NotImplementedException("Ha ha! Tricked you! I don't do anything!");

    // 派生类自定义的同名方法,通过Bar类型访问时调用此版本
    public int DoSomething()
        => throw new Exception("I tricked you again! I do do something! I throw exceptions!");

    // 实现抽象类的抽象方法,直接转发到显式接口实现
    public override void DoSomething()
        => ((IFoo)this).DoSomething();
}

效果验证

IFoo foo = new Bar();
foo.DoSomething(); // 调用显式接口实现的版本,抛出NotImplementedException

Bar bar = new Bar();
bar.DoSomething(); // 调用派生类的int版本,抛出Exception

Foo baseFoo = new Bar();
baseFoo.DoSomething(); // 调用override的方法,最终转发到显式接口实现

内容的提问来源于stack exchange,提问作者Brendan Lynn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:48:30