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

第6回 オブジェクト指向プログラミング(1)

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

コードの表記

既に前出のコードから適用している通り,今後は次の部分に関して表記を変更します。

  • {}と改行は,見やすさに応じて変更しています
  • 自インスタンスのメンバには,thisキーワードを付加します

thisはVB6のMeというキーワードと似て非なるものです。

VB6のMeは,同じモジュールでアクセスできても,外部からアクセスできないメンバに対しては無効でした。 しかしthisは,thisと記述した場所からアクセスできるメンバに対して有効です。

thisの付加は義務ではありませんが,共通性(自身のインスタンスもほかと同様に表記できる)という理由から,thisの付加を私はお勧めします。

カプセル化

このクラスのアクセス修飾子は,private(隠ぺい)とpublic(公開)が使われています。

publicなメンバ
  • public void Add(int code)
  • public void Update(Row row)
  • public void Delete(int code)
  • public bool Read(int code, Row row)
privateなメンバ
  • private const string FILENAME = "c:\\Common\\Database.mdb";
  • private string GetSelectSqlText(int code)
  • private string GetAddSqlText(int code)
  • private string GetUpdateSqlText(int code, string nameValue, string telephoneNumber)
  • private string GetDeleteSqlText(int code)
  • private void ExecuteQuery(string sqlText)
  • private OleDbConnection CreateDbConnection()
  • private string GetConnectionString()

publicなメンバを見ると,このクラスから生成されたオブジェクトは,Add,Update,Delete,Readというインターフェイスを持った装置であると考えることができます。

コンストラクタの省略

このクラスには,コンストラクタ(生成子)が記述されていません。 しかし,コンストラクタがないということではありません。

コンストラクタが省略された時は,以下のコンストラクタが記述されていることと同じ扱いになります。

public Row() {}

usingステートメント

このクラスでは,エラーメッセージの表示を行いません。このため,今回はusingステートメントを使うことにします。

using (OleDbConnection cn = this.CreateDbConnection()){
    using (OleDbCommand cd = new OleDbCommand()) {
        cd.Connection = cn;
        cd.CommandType = CommandType.Text;
        cd.CommandText = sqlText;
        cd.ExecuteNonQuery();
    }
}

例えば,上記のコードはusingステートメントでOleDbConnectionオブジェクトが設定されています。 これによって,usingブロック内から抜ける際には必ずDisposeメソッドが実行されます。

上記のコードは,最初にcd.Dispose(),次にcn.Dispose()が実行されます。

データを格納するクラスを作る

次にデータを格納するクラスを作ってみましょう。 前項と同様の手順で,Rowという名前のクラスを作成します。 Rowクラスは以下のようになります。

namespace WindowsFormsApplication1
{
    //*************************************************************
    /// <summary>レコードの値を格納するためのクラスです</summary>
    //*************************************************************
    class Row : NotifyPropertyChanged
    {
        //*************************************************************
        /// <summary>コンストラクタ</summary>
        //*************************************************************
        public Row() {
            this.Clear();
        }

        //*************************************************************
        /// <summary>Code プロパティ</summary>
        //*************************************************************
        private int _Code;
        public int Code {
            get { return this._Code; }
            set {
                if (this._Code == value) return;
                this._Code = value;
                this.OnPropertyChanged("Code");
            }
        }

        //*************************************************************
        /// <summary>Name プロパティ</summary>
        //*************************************************************
        private string _Name;
        public string Name {
            get { return this._Name; }
            set {
                if (this._Name == value) return;
                this._Name = value;
                this.OnPropertyChanged("Name");
            }
        }
        //*************************************************************
        /// <summary>Code プロパティ</summary>
        //*************************************************************
        private string _TelephoneNumber;
        public string TelephoneNumber {
            get { return this._TelephoneNumber; }
            set {
                if (this._TelephoneNumber == value) return;
                this._TelephoneNumber = value;
                this.OnPropertyChanged("TelephoneNumber");
            }
        }

        //*************************************************************
        /// Cliear 
        //*************************************************************
        public void Clear() {
            this.Code = 0;
            this.Name = "";
            this.TelephoneNumber = "";
        }
    }
}

著者プロフィール

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

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