如何让未重写抽象类虚方法时触发编译期错误?
以下代码为学习用途,请关注实现流程而非直接实现细节。
问题场景
我有一个实现文件读写功能的简单类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
相关产品推荐
相关产品推荐

