asp.net mvc でレスポンスヘッダに値を追加、削除する方法
kawa.xxx
kawalog
interface は直訳すると境界面で、メソッドの定義のみを書き、メソッドの実装をもたせることはできません。interface を実装する側では、抽象クラスにしないかぎり、 interface に定義されているメソッドをすべて実装しないとコンパイラに怒られてビルドが通りません。
interface は1つのクラスで複数実装することが出来ます。つまり、同名のメソッドを持ったinterfaceを実装する可能性が十分にあるということです。で、下記に示す様なDoというメソッドを持った2つのinterfaceがあるとします。
interface IHoge { string Do(); } interface IFuga { string Do(); }
この2つの interface を実装するクラス HogeFuga があります。ここでもちょっと見慣れない書き方が出てきて、どちらのDoメソッドの実装なのかわかる用に 戻り値の型 interface名.メソッド名(引数)
という風に書きます。
class HogeFuga : IHoge, IFuga { string IHoge.Do() { return "HogeDo!"; } string IFuga.Do() { return "FugaDo!"; } }
このHogeFugaクラスで2つのDoを使い分けるには下記のように一旦使いたいDoのある方にキャストしてから使います。(なんかinterfaceにキャストするのは変な感じ。。。)
キャストした後でないと、どちらのメソッドかわから無いので Visual Studio や LINQPad のインテリセンスにメソッドが表示されません。
var hogeFuga = new HogeFuga();
var hoge = (IHoge) hogeFuga;
var fuga = (IFuga) hogeFuga;
Console.WriteLine(hoge.Do());
Console.WriteLine(fuga.Do());
実行結果はこんな感じ。
この辺に詳しく書かれていますが、主に消したいけど消せないメソッドを隠すときなどに使われるようです。
この記事で使ったサンプル全体のコードは以下にあります。