本文介绍了C#9.0协变量返回类型和接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个代码示例:

一个编译

    class C {
        public virtual object Method2() => throw new NotImplementedException();
    }

    class D : C {
        public override string Method2() => throw new NotImplementedException();
    }

另一人没有

    interface A {
        object Method1();
    }

    class B : A {
        public string Method1() => throw new NotImplementedException();
        // Error    CS0738  'B' does not implement interface member 'A.Method1()'. 'B.Method1()' cannot implement 'A.Method1()' because it does not have the matching return type of 'object'.  ConsoleApp2 C:\Projects\Experiments\ConsoleApp2\Program.cs  14  Active

    }

协变返回类型如何在C#9.0中工作,为什么它不适用于接口?

How covariant return types work in C# 9.0 and why it does not work with interfaces?

推荐答案

尽管从C#9开始不支持接口中的协变返回类型,但是有一个简单的解决方法:

Whilst covariant return types in interfaces are not supported as of C# 9, there is a simple workaround:

    interface A {
        object Method1();
    }

    class B : A {
        public string Method1() => throw new NotImplementedException();
        object A.Method1() => Method1();
    }

这篇关于C#9.0协变量返回类型和接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 17:35