【问题标题】:Force subclasses to implement two interfaces强制子类实现两个接口
【发布时间】:2015-08-04 13:51:25
【问题描述】:

假设我有一个代表Stream 的类,并且我将这个类子类化以添加读写方法。这两个方法定义在两个单独的接口IWriteableStreamIReadableStream 中。

public class MyFooStream : Stream, IWriteableStream, IReadableStream

如何强制从Stream 继承的开发人员实现接口,以便我可以强制执行所有Stream 必须可读可写的想法?

编辑:所以我的解决方案是使Stream 抽象并实现这两个接口。然后接口方法在Stream 中被标记为抽象,强制子类实现它们。

public abstract class Stream : IWriteableStream, IReadableStream
{
    public abstract void WriteToStream();
    public abstract void ReadFromStream();
}

public class WaterStream : Stream
{
    public override void WriteToStream() {}
    public override void ReadFromStream() {}
}

【问题讨论】:

  • 你写的是Stream吗?我假设你们中没有人只是在上一层实现接口。

标签: c#


【解决方案1】:

MyFooStream 设为抽象类,并将抽象类上的这些方法“实现”为抽象方法 - 所有派生类都必须具有这些方法的实现。

【讨论】:

    【解决方案2】:

    如果接口方法在基类中实现,那么Stream 的任何派生都将继承这些方法,因此已经实现了IWritableStream / IReadableStream

    如果您想强制它们覆盖默认行为,那么您可以将read/write 方法抽象化(或整个类,如果需要)。

    示例

    public class MyFooStream : Stream, IWritableStream, IReadableStream
    {
        public abstract void Write(byte[] data);
        public abstract byte[] Read();
    }
    
    // if I don't override Write/Read methods the compiler will complain
    public class ReadableStream : MyFooStream
    {
        public override void Write(byte[] data)
        {
            ...
        }
    
        public override byte[] Read()
        {
            ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 2013-02-19
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 2019-08-04
      • 2015-10-23
      • 1970-01-01
      相关资源
      最近更新 更多