![]() |
特集Visual Basic 2005へ移行する理由(中編)VB6開発者にやさしいVB2005の言語仕様om (takanao)(Microsoft MVP Oct 2005 - Oct 2006 Visual C#)2006/01/07 |
|
|
前回は統合開発環境(IDE)の機能を中心にVisual Basic 2005(以下、VB2005)の進化を解説した。今回は読者が最も気になると思われる、Visual Basic 6.0(以下、VB6)やVisual Basic .NET(以下、VB.NET)と比べてVB2005の言語仕様やクラス・ライブラリが、どのように進化し、それがVB6開発者にとってどれほど使いやすいものになったかを説明する。特にWindowsアプリケーション開発における違いについて解説しよう。
本稿では前回と同様に、章の見出しの末尾に以下のようなマークを付けてVB6からの変化の具合を示している。
それでは次章から、VB2005での開発がVB6開発者に向けてどのように変化したかを解説していこう。なお本稿では先日開発者向けに公開されたVisual Studio 2005 Professional Edition日本語版 RTMのVB2005を使用している。
3. 開発
読者諸氏がいまVS2005を起動可能ならば、実際に実行して動作内容や画面を確かめながら以下の解説を読み進めてほしい。
まずはWindowsアプリケーションを新規作成する。これには、[新しいプロジェクト]ダイアログで、「Windowsアプリケーション」を選択して、[OK]ボタンをクリックする。[新しいプロジェクト]ダイアログはメニューバーから[ファイル]−[新規作成]−[プロジェクト]を選択することで表示できる。
Windowsアプリケーションを開発するに当たって、始めに行うのはフォームのデザインである。ツールボックスからコントロールをドラッグ&ドロップするというスタイルは、VB2005でもほとんど変わっていない。
![]() |
| VB2005におけるWindowsアプリケーションのフォーム・デザイン |
| フォーム・デザインに大きな変化はない。[ツールボックス]ウィンドウからフォームへアイテムをドラッグ&ドロップで追加してフォームをデザインする。 |
では、次にボタンをダブルクリックしてボタンのクリック・イベント・ハンドラを作成してみよう。
■3.1 フォームのデザインと生成されるコード ![]()
VB6は非常に効率的に設計されていて、フォーム上にコントロールなどを配置したときも、コードにはイベント・ハンドラや関数など開発者が本当に必要なコードしか表示されていなかった。以下はVB6でフォーム上にボタンを配置してイベント・ハンドラを生成したコードの例である。ご存じのとおり余分なコードは一切書かれていない。
|
|
| VB6で自動的に生成されるフォームの全体コード | |
| シンプルで余計なコードが一切生成されない。この例ではイベント・ハンドラのみが生成されている。 |
このような仕組みは効率的である半面、欠点もある。例えばVB6では完全なオブジェクト指向を採用していないため、フォームの継承ができない。同じようなフォームを作る場合でも、それぞれのフォームで毎回デザインを行う必要があったのである。このため、VB6ではフォームのデザインを統一したい場合や、業務で使用するフォームのデザインが限られている場合でも、同じようなデザインやコーディングをフォームの数だけ行う必要があり、非常に効率が悪かった。また、変更時もフォームの数だけ変更を繰り返す必要があった。
VB.NETは、完全なオブジェクト指向言語に生まれ変わったため、例えばフォーム上に配置したコントロールなら、その生成や配置、各プロパティ設定などに関する処理コードがすべて生成されるようになり、確かにフォームの継承も可能になった。これによって、統一が必要なフォームのデザインを行った基底クラスを作成して、ほかのフォームは、基底のフォームを継承するだけで、同じデザインやコーディングを何度も行う負担から解放されると思われていた。
だがこの機能を実現するために、VS.NETのフォーム・デザイナが自動生成するコード(=開発者が変更できないコード。以下、デザイン・コード)が、ソース・ファイル内に生成されることになってしまった。VB.NETでは、このようなコードを隠せるように、「#Regionディレクティブ」というキーワードが追加されているので、VS.NETのコード画面上では非表示にすることができる。だが、#Regionで隠されているとはいえ、触れてはいけないコードが勝手に自分のソース・ファイルに書かれていることに抵抗を感じたVB6開発者も多かっただろう。また、誤ってデザイン・コードを編集してしまって、フォームのデザイン画面が表示されなくなってしまうというトラブルも多かった。
以下のコードは、VS.NETが自動的に生成する、VB.NETのデザイン・コードである。
|
|
| VB.NETが自動的に生成するデザイン・コード | |
| 開発者が編集してはいけないデザイン・コード(太字部分)が大量に出力されている。 |
このような問題を解決するために、VB2005では、部分クラス(Partial Class:パーシャル・クラス)と呼ばれる機能が追加された。Partialとは、「部分的な、不完全な」という意味であり、その名のとおり、複数のファイルに分かれた部分的なコードを組み合わせて1つのクラスを作成することができる。
VB2005では、この機能を使って、デザイン・コード用のファイルと、開発者がコードを記述するためのファイルという2つのファイルに分割してクラスを実装することにした。そして、ビルドを行うときに2つのファイルを合わせて1つの完全なクラスを実現する。これによって開発者が編集するファイルのコード内容は、以下のようにVB6に近くなっている。
|
|
| VB2005で自動的に生成されるフォームの全体コード(フォームの例) | |
| VB.NETでは生成されていたデザイン・コードがなくなって、すっきりしたコードになっている。 |
VB.NETと比較するまでもなく、すっきりとしたコードになっている。VB.NETで必要だったFormクラスの継承宣言であるInheritsステートメントも存在していないし、C# 2.0で必要なPartialの宣言も省略されている。このように、記述を簡潔にすることでVB6開発者の抵抗を減らそうとしているのだと考えられる。
それではフォームのデザインが終わったら、次は別のフォームを開いていこう。
■3.2 フォームのインスタンス化処理 ![]()
VB6ではフォームの名前は、「クラス名」と「(暗黙の)フォームのインスタンス名」という2つの意味を持っていた。VBが開発された当初、フォームは暗黙のインスタンスで呼び出していた。バージョンを重ねてオブジェクト指向の考えを盛り込んだ結果、「Dim frm As New Form1」といった、クラスのような利用も可能になった。だが、このような呼び出し方ができるようになっても、互換性を維持するために「Form1.Show」のように暗黙のFormインスタンスを呼び出すことができた。このためVB6開発者の多くは、フォームのインスタンスを作成するのではなく、暗黙のインスタンスを使い続けた。
ところがVB.NETになって、完全なオブジェクト指向言語として再設計されたため、暗黙のインスタンスは使用できなくなった。フォームの変数を宣言して、フォームを記述したクラスをインスタンス化してから呼び出すことを強要された。VB6のプロジェクトをアップグレード・ウィザードでアップグレードした場合は、暗黙のインスタンスを疑似的に実現するコードが生成されたが、新規でプロジェクトを作成した場合は、フォームをインスタンス化して呼び出さなくてはならなくなった。
これに強い抵抗を感じたVB6開発者は多かった。これまでとまったく異なるコードを記述してフォームを呼び出さなくてはならないのだ。この時点でVB.NETへの移行をあきらめたVB6開発者も多かっただろう。
VB2005では、暗黙のフォーム・インスタンスが復活することになった。オブジェクト指向を理解した開発者からは反対の声も大きいものの、VB6開発者から見ると、既存の知識で開発を行うことが可能なため、移行がスムーズに行えるのではないだろうか。ただし、フォームが破棄されるタイミングが明確でなくなったり、フォームのスコープが広くなってしまうなど、さまざまな問題があるため、筆者の個人的な意見としては、やはり暗黙のインスタンスを使用するのではなく、きちんと宣言をして使ってほしい。
| INDEX | ||
| [特集]Visual Basic 2005へ移行する理由 | ||
| VB2005は.NETへの移行を加速できるのか!? | ||
| 1.なぜVB6開発者はVB.NETに移行しなかったか? | ||
| 2.互換性が高まった開発環境 | ||
| VB6開発者にやさしいVB2005の言語仕様 | ||
| 1.フォームのデザインと生成されるコード、フォームのインスタンス化処理 | ||
| 2.Myオブジェクト、コード・スニペット、配列の下限指定、暗黙の型変換 | ||
| 3.デフォルト・プロパティ、オブジェクトの解放、エディット&コンティニュー | ||
| VB6開発者が待ち望んだVB2005の便利機能 | ||
| 1. 進化したデータ・アクセス機能とアプリケーションの配布技術 | ||
| 2. 完成度を高めた移行ウィザードとまとめ | ||
ホワイトペーパー(TechTargetジャパン)
- .NET TIPS - .NET開発のテクニックとヒント集 - (2010/3/18)
− GridViewコントロールを階層表示させるには?
− Windowsフォームのボタンに画像を表示するには?
− C#でnullチェックを簡潔に行うには? - Chapter15:LINQとクエリ式 (2010/3/17)
C# 3.0の目玉機能であるLINQについて、さまざまな記述例を交えながら徹底解説。書籍『[完全版]究極のC#プログラミング』より転載 - VBラムダ式 基礎文法最速マスター (2010/3/16)
今度はVB。ラムダ式の基礎文法を、短い説明と簡単なコードでまとめる。「ラムダ式、どう書くんだっけ?」という場合の簡易リファレンスとして活用できる - ASP.NET MVC 2がリリース (2010/3/15)
ASP.NET MVC 2の正式版(VS 2008のASP.NET 3.5向け、VS 2010には標準で含まれる予定)のリリースについてのお知らせ
|
|
スキルアップ/キャリアアップ(JOB@IT)
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |








