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

C#子类如何覆写基类中定义的冲突异常逻辑?

解决方案

1. 定义三个自定义异常

先创建三个对应不同错误场景的异常类,明确区分规则:

// 公共异常:不定式不符合-en/-rn结尾要求
public class InvalidInfinitiveException : Exception
{
    public InvalidInfinitiveException(string message) : base(message) { }
}

// 规则动词专属异常:第三人称单数未以-t结尾
public class RegularVerbThirdPersonException : Exception
{
    public RegularVerbThirdPersonException(string message) : base(message) { }
}

// 情态动词专属异常:第三人称单数以-t结尾(违反规则)
public class ModalVerbThirdPersonException : Exception
{
    public ModalVerbThirdPersonException(string message) : base(message) { }
}

2. 重构基类GermanVerb

把公共的不定式检查放在基类构造函数里(确保所有子类强制遵守),将第三人称单数的检查逻辑设为虚方法,让子类可以按需重写:

public class GermanVerb
{
    public string Infinitive { get; }
    public string ThirdPersonSingular { get; }

    public GermanVerb(string infinitive, string thirdPersonSingular)
    {
        // 公共规则校验:所有动词必须通过
        if (!infinitive.EndsWith("-en") && !infinitive.EndsWith("-rn"))
        {
            throw new InvalidInfinitiveException($"动词不定式 {infinitive} 必须以-en或-rn结尾");
        }

        Infinitive = infinitive;
        ThirdPersonSingular = thirdPersonSingular;

        // 执行当前类的第三人称校验逻辑
        ValidateThirdPersonForm();
    }

    // 虚方法:规则动词的默认校验逻辑,子类可覆盖
    protected virtual void ValidateThirdPersonForm()
    {
        if (!ThirdPersonSingular.EndsWith("-t"))
        {
            throw new RegularVerbThirdPersonException($"规则动词第三人称单数 {ThirdPersonSingular} 必须以-t结尾");
        }
    }
}

3. 实现子类GermanVerbLikeModal

子类直接重写基类的ValidateThirdPersonForm方法,替换为情态动词的专属校验逻辑,完全覆盖基类的异常规则:

public class GermanVerbLikeModal : GermanVerb
{
    public GermanVerbLikeModal(string infinitive, string thirdPersonSingular) 
        : base(infinitive, thirdPersonSingular) { }

    // 重写虚方法,实现情态动词的校验规则
    protected override void ValidateThirdPersonForm()
    {
        if (ThirdPersonSingular.EndsWith("-t"))
        {
            throw new ModalVerbThirdPersonException($"情态动词第三人称单数 {ThirdPersonSingular} 不能以-t结尾");
        }
    }
}

逻辑说明

  • 公共规则(不定式结尾检查)在基类构造函数中强制执行,所有子类自动继承,无需重复编码。
  • 借助虚方法重写机制,子类可以彻底替换基类的第三人称校验逻辑,解决继承冲突问题。
  • 三个自定义异常分别对应不同错误场景,调用方能够精准捕获并处理特定类型的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:20