VB6開発者向け:C#で始める.NETプログラミング

第5回 C#のコードに移植する

この記事を読むのに必要な時間:およそ 11 分

現時点では,一部わからないコードがあるかもしれません。 これについては,以降の解説で明らかにしていきたいと思います。

なお,上記はVB6のコードをベタに移植したもので,実際にC#で同様のソフトウェアを開発する場合は,もう少し便利な方法があります。 これについては,次回以降ご説明していく予定ですが,その前に,まずは上記のコードを理解することから始めましょう。

オブジェクト指向プログラミング言語

実際にC#のコードを解説する前に,.NETプログラミングとは,オブジェクト指向プログラミングであることをご理解いただく必要があります。

オブジェクト指向プログラミングとは,データと,そのデータを処理する手続きをオブジェクトという単位でまとめて,これらを組み合わせてプログラミングしていくというものです。

オブジェクト指向プログラミングと聞くと新しいもののように感じるかもしれません。 しかし,この考え方による恩恵はVB6の頃からすでに受けていました。

例えば,VB6のサンプルコードではRecordSetオブジェクトを使いました。 また,Form1というオブジェクト上に,ボタンコントロールから生成した「読込み」⁠追加」⁠更新」⁠削除」⁠閉じる」という5つのオブジェクトを配置しました。

これらのオブジェクトを生成するためには,クラスを作成する必要があります。

例えば,今回C#で作成したフォームに配置した「読込み」⁠追加」⁠更新」⁠削除」⁠閉じる」の Buttonオブジェクトを生成するためには,Buttonクラスが必要になります。 しかし,Buttonクラスを自分で書く必要はなく,すでに誰かが作成したものを我々が使っていることになります。

一方で,上記のサンプルコードでは,電話帳フォームのクラスを作成しているに過ぎません。 つまり,極端な言い方をすれば「.NETプログラミングとは,誰かが作ったクラスを使ったり,自らがクラスを作成すること」と言えるかもしれません。

オブジェクト指向プログラミング言語であるかどうかは,とても大きな変更です。 以前,VB6とVB.NETよりも,VB.NETとC#のほうが近しい関係にあるとご説明しました。 この理由も,オブジェクト指向プログラミング言語か否かという違いが大きいと言えます。 また,前項で「このサンプルコードはC#らしさがない」と述べた理由も同様です。

これらについては,次回以降で明らかにして行く予定です。 現時点では「C#という開発言語は,クラスを使ったり作っていくものらしい」という曖昧な理解でよいでしょう。

基本的な構造について

以下のコードは,冒頭のC#サンプルコードの骨組み部分を抜粋したものです。

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1(){}
        private void addButton_Click(object sender, EventArgs e){}
            :
        private bool DeleteRecord(int code){}
    }
}

これを見ると,単純に以下の表記が階層化されて記述されていることに気づきます。

  • 文字列 {}

まずは,上から順に「文字列」の部分をご説明して行きたいと思います。

namespace WindowsFormsApplication1 {}

名前空間が,WindowsFormsApplication1ということになります。

サンプルコードを見ると{}の中に記述されているForm1というクラスがWindowsFormsApplication1に属していることがわかります。 また,ほかの名前空間にもForm1クラスを存在させることもできます。

つまり,名前空間によって,テクノロジーごとにクラスを分類したり,名前の衝突を避けることができます。

public partial class Form1 : Form {}

このソフトウェアのクラスであるForm1を定義しています。 ⁠{}」の中に記述されている変数,メソッド,プロパティ等は,このクラスに属することになります。

また,Formクラスを継承していることを示しています。 クラスの継承については,次回以降にご説明する予定です。

現時点では,Formクラスの機能をForm1が継承しているものだとご理解ください。

public Form1(){}

クラス名と同じ名前を持ち,戻り値の型を表記しないメソッドはコンストラクタです。 コンストラクタとは,オブジェクトを生成するために呼び出される特別なメソッドです。 サンプルコードでは,Form1オブジェクトを生成する際に,InitializeComponent()というメソッドを呼び出しています。

C#では,メソッドを呼び出す場合にはメソッド名の後ろに「()⁠⁠,引数がある場合には「()」の中に引数となる値,もしくは変数を記述します。 また,各命令語の末尾には「;」⁠セミコロン)を記述します。

Method();
Method(1, 2, 3);

private void addButton_Click(object sender, EventArgs e){}

追加ボタンがクリックされた際に呼び出される自動生成されたメソッドです。 VB6では戻り値のないメソッドはSubと記述しますが,C#では戻り値の型にvoidと記述します。

引数にはobject型のsenderとEventArgs型のeがあります。

senderには,このメソッドを呼び出したオブジェクトが格納されます。 変数eには,そのイベントから提供される値がある場合には,それらの値を格納したオブジェクトが格納されます。

VB6では,イベントから提供される値が複数ある場合は,その数だけ引数が存在しましたが,C#ではeというオブジェクトにすべて格納されることになります。

private bool DeleteRecord(int code){}

int型の引数を与えることでbool型の値を返すメソッドです。 VBでは戻り値のあるメソッドの場合はFunctionキーワードを記述しなければなりませんがC#では戻り値の型を記述します。 また,戻り値を持たない場合は,voidを記述します。

なお,VB6のLong型がintになっている理由ですが,.NETではInteger型で格納できる範囲が32ビットに変更になったためです。

著者プロフィール

伊藤達也(いとうたつや)

(株)井沢電器設備にて、業務管理システムの開発に従事しています。 この記事の趣旨通り、筆者自身が2005年後半にメインの開発言語をVB6からC#に移行し、2007年には Microsoft MVPアワードをC#で受賞しました。