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

C#泛型对象双分派访问者模式重载匹配失效问题

关于泛型TimedValue<T>双分派访问者模式的问题解答
  • 特定类型重载无法触发的核心原因
    C#的重载决议是编译时确定的,泛型类型TimedValue<T>的实例在编译阶段只会被识别为TimedValue<T>,访问者无法自动匹配到TimedValue<bool>或TimedValue<string>对应的重载——除非为每个需要特殊处理的T对应的TimedValue<T>显式实现Accept方法。
  • 是否必须放弃泛型?
    不用,但必须做针对性的显式实现:
    比如给TimedValue<bool>单独实现Accept方法,直接调用访问者的VisitSpecific(TimedValue<bool>),TimedValue<string>同理。示例代码如下:
    public class TimedValue<bool> : ITimedValue
    {
        public void Accept(ITimedValueVisitor visitor)
        {
            visitor.VisitSpecific(this);
        }
    }
    
    要是不愿做这些显式实现,那确实只能改成非泛型的特定类型(比如BoolTimedValue、StringTimedValue),否则访问者永远只会调用通用的VisitSpecific<T>(TimedValue<T>)重载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:09