質問: new objectwhatever() iinterfaceを実装するクラスを使用することができますか?いつそれをする必要がありますか?私が考えることができる唯一のことはあなたがメソッドを持っていて、それがiinterfaceを実装していることを除いてどのオブジェクトが渡されるのかわからない場合です。私はあなたがそれをする必要があるだろうどのくらいの頻度で考えることはできません。また、インターフェースを実装するオブジェクトを取り込むメソッドをどのように書くことができるでしょうか。それは可能ですか?
回答: インターフェースがどのように機能するのかを理解していても、いつ使用するのか、またどのような利点があるのかわからないようです。以下は、インターフェースが意味をなす場合の例です。// if i want to add search capabilities to my application and support multiple search // engines such as google, yahoo, live, etc. interface isearchprovider { string search(string keywords); } それから私はgooglesearchprovider、yahoosearchprovider、livesearchproviderなどを作成することができます.// if i want to support multiple downloads using different protocols // http, https, ftp, ftps, etc. interface iurldownload { void download(string url) } // how about an image loader for different kinds of images jpg, gif, png, etc. interface iimageloader { bitmap loadimage(string filename) } それからjpegimageloader、gifimageloader、pngimageloaderなどを作成します。ほとんどのアドインとプラグインシステムはインターフェースから動作します。もう1つの一般的な用途はrepositoryパターンです。さまざまなソースから郵便番号のリストをロードしたいとします。interface izipcoderepository { ilist<zipcode> getzipcodes(string state); } 私のwebアプリケーションでは、sqlデータベースの準備ができる前に何かを起動して実行できるように、xmlリポジトリを早い段階で作成することがよくあります。データベースの準備が整ったら、xmlバージョンを置き換えるためのsqlrepositoryを作成します。私のコードの残りの部分は、インターフェイスからすぐに実行されるため変更されていません。メソッドは以下のようなインターフェースを受け入れることができます。printzipcodes(izipcoderepository zipcoderepository, string state) { foreach (zipcode zipcode in zipcoderepository.getzipcodes(state)) { console.writeline(zipcode.tostring()); } }