C# 错误 CS0738 当类继承自接口且类型继承自接口类型方法时

时间:2020-12-21 10:53:28

标签: c# class interface

当类实现一个接口时,我得到了 CS0738,并且接口有一个方法,返回类型为接口。

在类中,返回类型是一个实现返回类型接口的结构体。

简单地说,这段代码说明了问题:

public interface IGame
{
    IPlayer WhoWin();
}

public interface IPlayer
{
    int ID { get; }
}

在课堂上:

public class MyGame : IGame
{
    // ERROR CS0738
    public MyPlayer WhoWin()
    {
        // ...
        return null;
    }
}

public class MyPlayer : IPlayer
{
    public int ID 
    {
        get
        {
            return ColorTranslator.ToWin32(Color);
        }
    }
    public Color Color;
}

我该怎么办?我该如何解决问题?

2 个答案:

答案 0 :(得分:3)

在您的 WhoWin 类中将 MyPlayer 的返回类型从 IPlayer 更改为 MyGame 然后它应该可以工作了。

public class MyGame : IGame
{
    // CHANGE THIS TO IPlayer like here:
    public IPlayer WhoWin()
    {
        // ...
        return null;
    }
}

public class MyPlayer : IPlayer
{
    public int ID 
    {
        get
        {
            return ColorTranslator.ToWin32(Color);
        }
    }
    public Color Color;
}

答案 1 :(得分:2)

您可以制作 IGame 通用接口并应用 where T : IPlayer 约束

public interface IGame<out T> where T : IPlayer
{
    T WhoWin();
}

然后像这样实现它

public class MyGame : IGame<MyPlayer>
{
    public MyPlayer WhoWin()
    {
        // ...
        return null;
    }
}
相关问题