0

インターフェイスを使用/実装する C# の方法を模倣する方法を探しています。要するに、次のコードを複製しようとしています。

interface EBook {
    function read();
}

class EBookReader {

    private $book;

    function __construct(EBook $book) {
        $this->book = $book;
    }

    function read() {
        return $this->book->read();
    }

}

class PDFBook implements EBook {

    function read() {
        return "reading a pdf book.";
    }
}

class MobiBook implements EBook {

    function read() {
        return "reading a mobi book.";
    }
}

実装の使用は正常に機能しますが、Ebook を型として使用するクラス EBookReader の方法を模倣することはできません。

コードのモックアップを含む codepen: http://codepen.io/Ornhoj/pen/gLMELX?editors=0012

4

1 に答える 1

2

タイプとして電子ブックを使用する

ケースは敏感です。

interface IEBook {
    read();
}

class EBookReader {
    book: IEBook;

    constructor(book: IEBook) {
        this.book = book;
    }

    read() {
        this.book.read();
    }

}

class PDFBook implements IEBook {
    read() {
        console.log("reading a pdf book.");
    }
}

class MobiBook implements IEBook {
    read() {
        console.log("reading a mobi book.");
    }
}
var pdf = new PDFBook();
var reader = new EBookReader(pdf);
reader.read();

このコードをプレイグラウンドでテストしてください。

于 2016-11-16T06:46:23.377 に答える