首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流/无限流接口定义

流/无限流接口定义
EN

Stack Overflow用户
提问于 2018-03-20 01:44:06
回答 1查看 121关注 0票数 2

我想做的是:

代码语言:javascript
运行
复制
public interface IRemove<out T>
{
    T Remove();
    bool IsCompleted { get; }
}

public interface IRemoveInfinite<out T> : IRemove<T>
{
    bool IsCompleted { get { return false; } } 
}

但这是无效的,因为我不能将实现放在C#接口中。

鉴于以下限制因素:

  1. 每个IRemoveInfinite也是一个自动的IRemove
  2. 确保无法成功编译IRemoveInfinite,当将IsCompleted设置为false时,IRemove将其设置为false。
  3. 允许在已经有父类的类上实现这些接口。
  4. 我希望能够在编译时强制接收无限流,有些函数可能需要无限流,如果它们无法处理这些流的话。

我如何编码这样的接口或以其他方式封装它?

EN

回答 1

Stack Overflow用户

发布于 2018-03-20 02:07:16

接口是契约声明,但您尝试将此契约的实现插入其中。

也许您应该使用抽象类来定义行为:

代码语言:javascript
运行
复制
public interface IRemove<out T>
{
    T Remove();

    bool IsCompleted { get; }
}

public abstract class RemoveInfinite<T> : IRemove<T>
{
    public bool IsCompleted
    {
        get { return false; }
    }

    public abstract T Remove();
}

如果不能使用继承,请使用类的组合:

代码语言:javascript
运行
复制
public class ClassRemove : RemoveInfinite<object>
{
    public override object Remove()
    {
        return new object();
    }
}

public class ClassA : SomeBaseClass, IRemove<object>
{
    private RemoveInfinite<object> removeInfinite = new ClassRemove();

    public object Remove()
    {
        return removeInfinite.Remove();
    }

    public bool IsCompleted
    {
        get { return removeInfinite.IsCompleted; }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49375116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档