matarillo.com

The best days are ahead of us.

31日間ReSharper一周 Day 19: Alt+Enterでメンバーを実装

2012-12-30 18:17:12

元記事

31日間ReSharper一周」の19日目にようこそ。

Visual Studio 2003と2005にはどちらもインターフェースの実装を支援する機能があった。VS2003の機能はかなり気難しかった。VS2005はだいぶよかった。ReSharperはさらによい。見てみよう。

新しいクラスを作成してクラス宣言に: IFoo を追加すると、現在のコードは(インターフェースを満たすメソッドがクラスにないために)コンパイルできないので赤波線が出る。カーソルを波線つきコードに持ってくると赤い電球が表示され、Alt+Enterを押すと「メンバーを実装」という応急処置が表示される。

ReSharperの「メンバーを実装」する応急処置

同じことは、あるクラスが非抽象クラスなのに親クラスが抽象メソッドを持っているときにも起こる。ただこの場合には第2の応急処置がある。「○○クラスの抽象クラス化」だ。一目瞭然だから無視するよ。

注意してほしいのは、子孫クラスがすでにabstractでマークされているなら、未実装の抽象メソッドがあっても赤波線が出ないことだ。エラーではないからだ。だから応急処置は表示されない。ReSharperにはそれらを自動的にオーバーライドする方法もあるが、今のところ木曜日(22日目)にネタにする予定だ。

「メンバーの実装/オーバーライド」ウィザード

ReSharperの「メンバーの実装/オーバーライド」ウィザードの1ページ目。どのメンバーを実装するのか選択する。

ウィザードの最初のページではどのメンバーを実装したいかを選ぶ。デフォルトではすべてが選択されている。どれか1つでもチェックをはずすのは馬鹿なことだ。未実装のままのインタフェースメンバーや抽象メンバーが残ってしまい、コードはコンパイルできないままだろうから。

リストの上、右上にあるツールバーボタンに注目して欲しい。こいつらでリスト表示を切り換えられる。ツリー表示ではすべてがインターフェースでグルーピングされる。平らなリスト表示ではアルファベット順にソートされる。この設定は、ウィザードでの表示方法にしか影響しない。 どんな順序に並んでいようがReSharperはメンバーを生成する。

下には3つの選択肢がある。「ドキュメントコメントのコピー」、「明示的なインターフェース実装」、そして「インターフェース実装をリージョンで囲む」だ。これらはどう見ても自明です。本当にありがとうございました。それに僕はこいつらをいまだに使ったことがないから、これ以上取り上げることはない。2ページ目に行こう。

ReSharperの「メンバーの実装/オーバーライド」ウィザードの2ページ目。どのプロパティに裏付けフィールドを生成するのか選択する。

2ページ目はReSharper版の方がVisual Studio版よりずっとすごいところだ。プロパティのどれか、あるいは全部に裏づけフィールドを自動作成できるからだ。(ReSharper Optionsで設定した命名規約に沿った)フィールドを追加し、プロパティのゲッターとセッターでそれを読み書きする。メソッドには、一覧でチェックしなかったプロパティと同様、NotImplementedExceptionを投げる代替コードが置かれる。

一覧の全てのフィールドにチェックを入れるには、Ctrl+Aを押してSpaceを押す。

最後にFinishをクリックすればコードが生成される。

注:2ページ目にある「アルファベット順にソート」のチェックボックスは、1ページ目のツールバーボタンと同じ設定だ。「アルファベット順にソート」にチェックすれば、ソートされた平らなリストで表示されるが、チェックをはずせばツリーで表示される。要はこれは、両方のページのためのただ1つのオプション(一方を変えれば他方も変わる)だ。でも、なんだかよく分からない理由で、2つのページでは異なる表示になっている。

さて、「メンバーを実装」はこんな感じだ。単純だけど役に立つ。唯一足りないと思うオプションは、裏づけフィールドのどれか、あるいは全てに初期値を設定するためのコンストラクタを追加することだ。これを自動化する方法もある(22日目に予定してもいる)けど、ウィザードに追加のページがあったならもっとよかったのに。とはいえ、すべてをいっぺんに実装しながら、裏づけフィールドを作成もするという機能は、かなりすてきだ。


31日間ReSharper一周 インデックスへ戻る