c# – 泛型和接口问题

给出以下类和接口:

public class Test<T>
{
}

public interface ITesting<T>
{
    Test<T> Loadtest();
}

我可以添加一个具有以下内容的类:

public class TestManager : ITesting<object>
{
    #region ITesting

    public Test<object> Loadtest()
    {
        return new Test<object>();
    }

    #endregion
}

哪个工作正常,并没有错误.如果我尝试用以下内容替换该类:

public class TestDerived : Test<object>
{
}

public class TestDerivedManager : ITesting<object>
{
    #region ITesting

    public TestDerived Loadtest()
    {
        return new TestDerived();
    }

    #endregion
}

我现在收到以下错误

Error   'TestDerivedManager' does not implement interface member 'ITesting.Loadtest()'. 'TestDerivedManager.Loadtest()' cannot implement 'ITesting.Loadtest()' because it does not have the matching return type of 'Test'.

但对我来说,似乎这应该起作用,因为TestDerived是Test< object>.我显然在这里没有正确理解.有人可能会指出我为何不正确的细节吗?也许我可能会做些什么来纠正它?

解决方法

您想要的功能称为返回类型协方差.它是c的一个特性,但不是c#的特征,所以你必须做错误所说的.

我建议你做一个调用你的公共方法的显式接口实现.这样你就可以获得两全其美.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...