强制子类实现两个接口

时间:2015-08-04 13:51:25

标签: c#

让我们说我有一个代表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() {}
}

2 个答案:

答案 0 :(得分:4)

MyFooStream成为一个抽象类,然后实现'抽象类上的那些方法作为抽象方法 - 所有派生类都必须具有这些方法的实现。

答案 1 :(得分:2)

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

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

示例

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()
    {
        ...
    }
}