.NET TIPS

C#からVBのMy機能を利用するには?[2.0のみ、VS 2005のみ、C#]

デジタルアドバンテージ 一色 政彦
2006/02/17


“My”はクラスの海からVBプログラマを救う!?

 Visual Basic 2005(以降、VB 2005)では、注目の新機能の1つとして“My”機能が追加された。このMy機能とは、よく使う機能(さまざまなプロパティやメソッド)へVisual Basic開発者が直感的にアクセスできるようにするためのものだ。

 例えばコンピュータ名を取得するには、(「TIPS:マシン名/ユーザー名を取得するには?」に示されているように)従来は次のようなコードを記述していた。

Dim ComputerName As String = Environment.MachineName
通常の(=My機能を使わない)場合のコンピュータ名の取得

 しかし.NET Frameworkのクラス・ライブラリに詳しくない開発者にとって、EnvironmentクラスのMachineNameプロパティでコンピュータ名を取得できるということには、容易に気付けないかもしれない。それよりも、次のコードのように、「My」(わたし)の「Computer」(コンピュータ)の「Name」(名前)という感じで、コンピュータ名を取得できる方が格段に分かりやすいだろう。

Dim ComputerName As String = 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用いる場合は、次の画面のように、[ソリューション エクスプローラ]から「参照の追加」を行う。

VS 2005のIDEにおけるMicrosoft.VisualBasic.dllファイルへの参照の追加
C#でMy機能を使用するには、Microsoft.VisualBasicのアセンブリ・ファイルに対する参照を追加する必要がある。
  [ソリューション エクスプローラ]の「参照設定」を右クリックし、表示されるコンテキスト・メニューから[参照の追加]を選択する。これにより、[参照の追加]ダイアログが表示される。
  [参照の追加]ダイアログの[.NET]タブを開くと参照可能なコンポーネントの一覧が表示されるので、そこから「Microsoft.VisualBasic」を選択する。
  [OK]ボタンをクリックして[参照の追加]ダイアログを閉じると、「Microsoft.VisualBasic」への参照が[ソリューション エクスプローラ]の「参照設定」内に追加される。

 参照が追加できたら、後は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」が利用できないようだ。

 実際にこれらのクラスにアクセスするには、次のようなコードを記述すればよい(コードの内容はコメントを参照してほしい)。

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{

  class Program
  {
    static void Main(string[] args)
    {
      // ↓VBのComputerオブジェクト(=My.Computer)の生成
      Microsoft.VisualBasic.Devices.Computer myComputer
        = new Microsoft.VisualBasic.Devices.Computer();
      // ↓My.Computer.Info.OSFullNameの呼び出し
      Console.WriteLine(myComputer.Info.OSFullName);
    }
  }
}
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機能ヘルパー・クラスを利用した例だ。

using System;
using AtmarkIT.VisualBasic.Features; // My機能ヘルパー・クラスの使用

namespace ConsoleApplication1
{

  class Program
  {
    static void Main(string[] args)
    {
      // VBのMy機能のように呼び出す

      // My.Application
      Console.WriteLine(My.ApplicationOfWindows.Info.Title);
      Console.WriteLine(My.ApplicationOfLibrary.Info.Title);
      Console.WriteLine(My.ApplicationOfConsole.Info.Title);

      // My.Computer
      Console.WriteLine(My.ComputerOfClient.Name);
      Console.WriteLine(My.ComputerOfServer.Name);

      // My.User
      Console.WriteLine(My.UserOfWindows.Name);
      //Console.WriteLine(My.UserOfWeb.Name);
      // ↑Webアプリケーション以外では動作しない

      // My.Log
      Console.WriteLine(My.Log.TraceSource.Name);


      // ▼筆者の環境での出力例▼:
      // ConsoleApplication1
      // ConsoleApplication1
      // ConsoleApplication1
      // DAPC89
      // DAPC89
      // D-ADVANTAGE\masa-i
      // DefaultSource
    }
  }
}
My機能ヘルパー・クラスを利用したサンプル・プログラム

 このように、My機能ヘルパー・クラスを利用すれば、VB 2005と同じような記述方法で、My機能を呼び出せる。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:C# 処理対象:VB関数
カテゴリ:Visual Studio 2005 処理対象:IDE
関連TIPS:マシン名/ユーザー名を取得するには?

この記事と関連性の高い別の.NET TIPS
既存のMy機能のオブジェクトを拡張するには?
My機能を拡張して独自の機能を追加するには?
My拡張をパッケージ化して再利用するには?
My拡張パッケージを配布するには?
進行状況を表示しながらディレクトリやファイルをコピー/移動/削除するには?(My機能活用)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間