.NET TIPS C#からVBのMy機能を利用するには?[2.0のみ、VS 2005のみ、C#]デジタルアドバンテージ 一色 政彦2006/02/17 |
|
|
|
Visual Basic 2005(以降、VB 2005)では、注目の新機能の1つとして“My”機能が追加された。このMy機能とは、よく使う機能(さまざまなプロパティやメソッド)へVisual Basic開発者が直感的にアクセスできるようにするためのものだ。
例えばコンピュータ名を取得するには、(「TIPS:マシン名/ユーザー名を取得するには?」に示されているように)従来は次のようなコードを記述していた。
|
|
通常の(=My機能を使わない)場合のコンピュータ名の取得 |
しかし.NET Frameworkのクラス・ライブラリに詳しくない開発者にとって、EnvironmentクラスのMachineNameプロパティでコンピュータ名を取得できるということには、容易に気付けないかもしれない。それよりも、次のコードのように、「My」(わたし)の「Computer」(コンピュータ)の「Name」(名前)という感じで、コンピュータ名を取得できる方が格段に分かりやすいだろう。
|
|
My機能を使った場合のコンピュータ名の取得 |
このように、My機能を使えば、クラス・ライブラリを熟知していなくても、さまざまな機能に直感的にアクセスできるようになるわけだ。
My機能には、次のリンク先のページで示されているようにさまざまな機能がある。
ただし「My.……」の書式で記述するMy機能はVB 2005のみの機能で、C# 2.0では利用することができない。そこで本稿では、C# 2.0からVB 2005のMy機能を使用する方法を紹介する(ただしすべてのMy機能が利用できるわけではないことに注意してほしい)。
C# 2.0からVB 2005のMy機能にアクセスする方法
まずはC#のプロジェクトに対して(.NET Framework 2.0の)Microsoft.VisualBasic.dllファイルへの参照を追加する。
これには、コマンドラインでC#コンパイラ(csc.exe)を用いる場合にはビルドの際に/referenceオプション(省略形は/r:)を付けて呼び出せばよい。Visual Studio 2005(以降、VS 2005)などのIDE用いる場合は、次の画面のように、[ソリューション エクスプローラ]から「参照の追加」を行う。
参照が追加できたら、後はMy機能経由で利用されている実際のクラスを直接呼び出せばよいわけだ。
しかしC#からMicrosoft.VisualBasicアセンブリのクラス経由でMy機能を呼び出す場合、My機能が提供するすべての機能にアクセスできるわけではない。例えばMy.Settingsなどは、Microsoft.VisualBasicアセンブリを利用していないため、ここで述べている方法ではアクセスできない。
筆者が調べた限りでは、主に次のようなMy機能のクラス(主にタスクの実行機能)にはアクセスできることが分かった。
My機能(VB 2005) | 対応クラス | 説明 |
My.Application (Windowsフォーム・バージョン) |
WindowsFormsApplicationBaseクラス (Microsoft.VisualBasic.ApplicationServices名前空間) |
メインとなる現在のWindowsアプリケーションに関連する情報や機能(例えば、スプラッシュ・スクリーンなど)にアクセスできる |
My.Application (ライブラリ・バージョン) |
ApplicationBaseクラス (Microsoft.VisualBasic.ApplicationServices名前空間) |
メインとなる現在のアプリケーションに関連する情報や機能(例えば、アプリケーション・ログの書き込みなど)にアクセスできる |
My.Application (コンソール・バージョン) |
ConsoleApplicationBaseクラス (Microsoft.VisualBasic.ApplicationServices名前空間) |
メインとなる現在のコンソール・アプリケーションに関連する情報や機能(例えば、アプリケーションのコマンドライン引数など)にアクセスできる |
My.Computer (クライアント・バージョン) |
Computerクラス (Microsoft.VisualBasic.Devices名前空間) |
クライアント・コンピュータ関連の情報(例えば、オーディオ、キーボード、マウスなど)とサーバ・コンピュータ関連の情報(例えば、時計など)にアクセスできる |
My.Computer (サーバ・バージョン) |
ServerComputerクラス (Microsoft.VisualBasic.Devices名前空間) |
サーバ・コンピュータ関連の情報(例えば、時計など)にアクセスできる |
My.User (Windowsバージョン) |
Userクラス (Microsoft.VisualBasic.ApplicationServices名前空間) |
スレッドの現在のIDと関連付けられたユーザーに関連する情報にアクセスできる |
My.User (Webバージョン) |
WebUserクラス (Microsoft.VisualBasic.ApplicationServices名前空間) |
アプリケーションの現在のHTTP要求のユーザーIDに関連付けられたユーザーに関連する情報にアクセスできる |
My.Log | Logクラス (Microsoft.VisualBasic.Logging名前空間) |
.NET Frameworkのログ・サービス(例えば、アプリケーション・イベント・ログの書き込みなど)にアクセスできる |
My機能に対応するMicrosoft.VisualBasicアセンブリのクラス群 | ||
Webアプリケーションでは、VB 2005でも「My.Application」が利用できないようだ。 |
実際にこれらのクラスにアクセスするには、次のようなコードを記述すればよい(コードの内容はコメントを参照してほしい)。
|
|
C#からVB 2005のMy機能を利用するサンプル・プログラム | |
My.Computer.Info.OSFullNameを呼び出して、OS名をコンソール出力している。これを実行すると筆者の環境では、「Microsoft Windows XP Professional」という文字列がコンソール上に出力される。 |
しかし、いちいちクラスをインスタンス化するのも面倒であるため、VB 2005のMy機能のように呼び出せる簡単なヘルパー・クラスを用意した。そのクラスのソース・ファイルは次のリンクからダウンロードできる(動作保証はしないが、自由に使用・改変してよい)。
このクラスをプロジェクト内にインポートして、
using AtmarkIT.VisualBasic.Features;
という名前空間の宣言を行えば、次のようなオブジェクトが利用できる。
- My.ApplicationOfWindows : My.ApplicationのWindowsフォーム・バージョン
- My.ApplicationOfLibrary : My.Applicationのライブラリ・バージョン
- My.ApplicationOfConsole : My.Applicationのコンソール・バージョン
- My.ComputerOfClient : My.Computerのクライアント・バージョン
- My.ComputerOfServer : My.Computerのサーバ・バージョン
- My.UserOfWindows : My.UserのWindowsバージョン
- My.UserOfWeb : My.UserのWebバージョン
- My.Log : My.Log(Webアプリケーション用)
ここで見て分かるように、VB 2005のMy機能のように、プロジェクトの種類によってMy機能の内容を自動で切り替えたりしないので注意してほしい。例えばWindowsフォーム・アプリケーションでMy.Applicationを利用したい場合は、Windowsフォーム・バージョンの「My.ApplicationOfWindows」を呼び出す必要がある。
次のサンプル・プログラムは、このMy機能ヘルパー・クラスを利用した例だ。
|
|
My機能ヘルパー・クラスを利用したサンプル・プログラム |
このように、My機能ヘルパー・クラスを利用すれば、VB 2005と同じような記述方法で、My機能を呼び出せる。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:C# 処理対象:VB関数 カテゴリ:Visual Studio 2005 処理対象:IDE 関連TIPS:マシン名/ユーザー名を取得するには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|