連載

プロフェッショナルVB.NETプログラミング

第1回 さらなる進化を遂げたVisual Basic

(株)ピーデー
川俣 晶
2002/03/16

Page1 Page2 Page3 Page4 Page5 Page6

 もう1つ例を見てみよう。VB.NETで書いたクラス・ライブラリと、C#で書いたクラス・ライブラリが同じように扱えることをサンプル・ソースを通して見てみよう。なお、このサンプル・ソースの詳細はまだ理解できないと思うが、それはそれで構わない。

 それでは例として、指定座標に赤色でHelloと出力するメソッドを持つクラス・ライブラリを作成してみよう。新規プロジェクト作成で、Visual Basicのクラス・ライブラリを選んでプロジェクトを作り、以下のようなソースを書き込む。

 1: Imports System.Drawing
 2:
 3: Namespace VBSample
 4:   Public Class Sample001
 5:     Public Sub DrawRedHello(ByRef g As Graphics, ByVal x As Integer, ByVal y As Integer)
 6:       g.DrawString("Hello!", New Font(FontFamily.GenericSansSerif, 12), _
 7:         Brushes.Red, x, y)
 8:     End Sub
 9:   End Class
10: End Namespace
VB.NETで記述した文字列を出力するクラス・ライブラリ

 見慣れないdrawStringというメソッドを呼び出しているが、これは文字を描くための.NET Frameworkの機能である。なお、テンプレートとしてクラス・ライブラリを選んだプロジェクトは、グラフィック関係のモジュールを標準では参照していないので、参照を追加しておく必要がある。

 さて、これと同じものをC#でも記述してみよう。これは、まあこんなものだと思って軽く見ていただければよいだろう。機能的にはVB.NET版とほとんど同じである。ワークスペースにC#のクラス・ライブラリを新規プロジェクトとして追加し、以下のようなソースを入力する。

 1: using System;
 2: using System.Drawing;
 3:
 4: namespace CSClassLib
 5: {
 6:   public class Sample002
 7:   {
 8:     public void DrawRedHello(Graphics g, int x, int y)
 9:     {
10:       g.DrawString("Hello!", new Font(FontFamily.GenericSansSerif, 12),
11:         Brushes.Red, x, y);
12:     }
13:   }
14: }
C#で記述した文字列を出力するクラス・ライブラリ

 さて、これを同じように呼び出して使用できることを示すために、呼び出し側のプログラムを作成してみよう。ワークスペースにVisual BasicのWindowsアプリケーションの新規プロジェクトを追加する。

 まずは、同じワークスペース内の2つのクラス・ライブラリを参照に追加する。そして、以下のようにフォームに2個のピクチャーボックスを貼り付ける(ここでは見やすいように背景色を変更してある)。

2個のピクチャーボックスを貼り付けたフォーム

 そして以下のようなソースを書き込む。

 1: Public Class Form1
 2:   Inherits System.Windows.Forms.Form
 3:
 4: #Region " Windows Form Designer generated code "
 5:
 6:   Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
 7:     Dim sample001 As VBClassLib.VBSample.Sample001
 8:     sample001 = New VBClassLib.VBSample.Sample001()
 9:     sample001.DrawRedHello(e.Graphics, 0, 0)
10:   End Sub
11:
12:   Private Sub PictureBox2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox2.Paint
13:     Dim sample002 As CSClassLib.Sample002
14:     sample002 = New CSClassLib.Sample002()
15:     sample002.DrawRedHello(e.Graphics, 0, 0)
16:   End Sub
17: End Class
VB.NETとC#で記述したクラス・ライブラリを呼び出すサンプル・プログラム7

 4行目の部分は、統合環境が自動生成したコードが隠されていることを示す。

 これで、上のピクチャーボックスにはVB.NET版のクラス・ライブラリの処理結果が表示され、下のピクチャーボックスにはC#版のクラス・ライブラリの処理結果が表示される。結果は以下のようになる。

サンプル・プログラム7の実行結果

 見てのとおり結果は同じになるが、それは同じクラス・ライブラリのメソッドを呼び出しているからで、当たり前である。それよりも注目していただきたいのは、VB.NETとC#のどちらのクラス・ライブラリのメソッドを呼び出す場合でも、宣言や手順にほとんど差がないことである。複数言語の混在は、このように、VB.NETでは非常にハードルが低くなっている。

まとめ

 次回より、VB 6からVB.NETへ変更された言語仕様の細かい相違を順次解説したいと考えている。本当なら、まず継承機能のような大物から解説に取りかかりたいのだが、言語仕様の細かい相違を知らないままサンプル・ソースを見ても、何が何やら分からなくなってしまう恐れがあるため、まず足元から固めていきたいと思う。確かに、変わった点よりも、変わっていない点の方が多いのだが、変わった点だけ数え上げれば、けして少なくはないのである。

 では次回もまた会おう。End of Article


 INDEX
  第1回 さらなる進化を遂げたVisual Basic
    1.これは大事件である(1)
    2.これは大事件である(2)
    3.開発環境の比較
    4.実行環境の変化
    5..NET Frameworkより得るもの(1)
  6..NET Frameworkより得るもの(2)
 
「プロフェッショナルVB.NETプログラミング」


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 記事ランキング

本日 月間