【问题标题】:C# Error CS0738 when class inherits from interface and with type that inherits from interfce type method当类从接口继承并且类型从接口类型方法继承时,C# 错误 CS0738
【发布时间】:2020-12-21 10:53:28
【问题描述】:

当类实现一个接口时,我得到了 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;
}

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

【问题讨论】:

  • 一个类不继承一个接口——它实现它.....继承只在类之间起作用
  • 将返回类型设为对象。 : 公共对象 WhoWin()
  • @marc_s 我已经编辑了帖子

标签: c# class interface


【解决方案1】:

MyGame 类中将WhoWin 的返回类型从MyPlayer 更改为IPlayer,那么它应该可以工作。

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;
}

【讨论】:

    【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 2013-02-19
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多