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

.NET Core 7中实现接口的类能否返回自身类型?

解决静态抽象接口成员返回具体类型的问题
  • 用泛型接口实现返回自身类型
    无需改用继承方案,通过给接口添加自约束的泛型参数,就能让Create方法直接返回实现类的具体类型,示例代码如下:

    public interface IRegularPolygon<TSelf> where TSelf : IRegularPolygon<TSelf>
    {
        static abstract TSelf Create(int sideLength);
        int SideLength { get; }
        int GetPerimeter();
    }
    
    public class Hexagon : IRegularPolygon<Hexagon>
    {
        public int SideLength { get; }
    
        private Hexagon(int sideLength)
        {
            SideLength = sideLength;
        }
    
        public static Hexagon Create(int sideLength)
        {
            return new Hexagon(sideLength);
        }
    
        public int GetPerimeter()
        {
            return SideLength * 6;
        }
    }
    

    调用时直接使用var hex = Hexagon.Create(5);即可,不需要强制类型转换,完全符合编译器的类型检查要求。

  • 直接返回具体类型报错的原因
    .NET 7对静态抽象接口成员的实现要求签名严格匹配接口定义。如果接口定义的Create方法返回IRegularPolygon,那么实现类必须返回相同的接口类型——静态方法不支持返回值协变,这和实例方法的协变规则不同,因此返回Hexagon会触发编译错误。

  • 是否需要改用继承方案
    不需要。继承方案虽然能实现类似的创建逻辑,但泛型接口的方式更贴合面向接口编程的设计原则,同时保留了静态创建方法的便利性,避免了继承带来的类层级耦合问题。若改用基类实现,只能依赖实例方法完成对象创建,无法保留静态方法的调用模式。

内容的提问来源于stack exchange,提问作者Aurélien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:20:19