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

如何让未重写抽象类虚方法时触发编译期错误?

以下代码为学习用途,请关注实现流程而非直接实现细节。

问题场景

我有一个实现文件读写功能的简单类FileHandler:

public class FileHandler : IReadAndWriteHandler
{
    private const string Path = @"C:\Temp\tempFile.txt";
    
    public void Write(string message)
    {
        using var writer = new StreamWriter(Path);
        writer.WriteLine(message);
    }

    public string Read()
    {
        using var reader = new StreamReader(Path);
        
        return  reader.ReadLine();
    }
}

对应的接口定义如下:

public interface IReadAndWriteHandler
{
    public void Write(string message);
    public string Read();
}

为了扩展功能,我们采用装饰器模式编写了抽象装饰类HandlerDecorator:

public abstract class HandlerDecorator : IReadAndWriteHandler
{
    private readonly IReadAndWriteHandler _handler;

    protected HandlerDecorator(IReadAndWriteHandler handler)
    {
        _handler = handler;
    }
    
    public virtual void Write(string message)
    {
        _handler.Write(message);
    }

    public virtual string Read()
    {
        return _handler.Read();
    }
}

在继承该抽象类实现加密功能时,我编写了EncryptionHandlerDecorator类,但意外忘记重写Read()方法:

public class EncryptionHandlerDecorator : HandlerDecorator
{
    public EncryptionHandlerDecorator(IReadAndWriteHandler handler)
        : base(handler)
    {
        
    }

    public override void Write(string message)
    {
        base.Write(Encrypt(message));
    }

    private static string Encrypt(string message) => $"Encrpyt({message})";
}

这种情况下编译不会报错,程序能正常运行,但实际使用时会读取到加密后的内容,导致逻辑错误。

虽然可以通过不使用抽象类、直接实现接口的方式避免这个问题,但这不是本次关注的重点。

提问

如果继承抽象类时未重写其中定义的虚方法,能否实现类似接口的编译期错误提示?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:21:58