クラスにプロパティを実装する - クラスのプロパティの作成 - C#

クラスにプロパティを実装するコードを紹介します。

概要

クラスにプロパティを定義する場合は get set 文を利用します。

書式 : 読み書き可能プロパティ

 (アクセス識別子) (型) (プロパティ名)
 {
  get{
   [プロパティGet時のロジック]
  }
  set
  {
   [プロパティSet時のロジック]
  }
 }

書式 : 読み込み専用プロパティ

 (アクセス識別子) (型) (プロパティ名)
 {
  get{
   [プロパティGet時のロジック]
  }
 }

書式 : 書き込み専用可能プロパティ

 (アクセス識別子) (型) (プロパティ名)
 {
  set
  {
   [プロパティSet時のロジック]
  }
 }
の書式を利用します。setブロック内では、value 変数にプロパティとして与えられた値が格納されています。

プログラム例1

UI

下図のUIを作成します。

コード

FormMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ClassProperty
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      MyClass mc = new MyClass();
      textBox1.Text += string.Format("Value:{0:d}\r\n",mc.number);

      mc.number = 4;
      textBox1.Text += string.Format("Value:{0:d}\r\n", mc.number);

      mc.number = 25;
      textBox1.Text += string.Format("Value:{0:d}\r\n", mc.number);
    }
  }
}
MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassProperty
{
  public class MyClass
  {
    private int num = 0;

    public int number
    {
      get
      {
        return num;
      }
      set
      {
        num = value + 10;
      }
    }
  }
}

解説

MyClass.csでは、プロパティに与えた数値に10を加算した値を内部のnum変数に保存するクラスです。
フォーム側からは、MyClassのインスタンスを作成し、numberプロパティに代入する数値を変えてプロパティの値を画面に表示する処理を実装しています。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。最初の値は初期値なので"0"が、2つめの値は、numberプロパティに4を代入した後なので"14"が、3つめの値は、numberプロパティに25を代入した後なので"35"が表示されます。

プログラム例2

こちらの記事で作成したクラスを変更して、プロパティでメンバ変数にアクセスできるようにします。

UI

下図のUIを作成します。

コード

MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassProperty
{
  public class MyClass
  {
    private int ix;
    private int iy;
    private int iz;
    private int itotal;

    public int x
    {
      get { return ix; }
      set
      {
        ix = value;
        itotal = ix + iy + iz;
      }
    }

    public int y
    {
      get { return iy; }
      set
      {
        iy = value;
        itotal = ix + iy + iz;
      }
    }

    public int z
    {
      get { return iz; }
      set
      {
        iz = value;
        itotal = ix + iy + iz;
      }
    }

    public int total
    {
      get { return itotal; }
    }
  }
}
FormMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ClassProperty
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      MyClass mc1 = new MyClass();
      MyClass mc2 = new MyClass();
      MyClass mc3 = new MyClass();

      mc1.x = 8; mc1.y = 6; mc1.z = 3;
      mc2.x = 2; mc2.y = 3; mc2.z = 1;
      mc3.x = 7; mc3.y = 4; mc3.z = 9;

      textBox1.Text = string.Format("({0:d}, {1:d}, {2:d}){3:d}\r\n", mc1.x, mc1.y, mc1.z, mc1.total);
      textBox1.Text += string.Format("({0:d}, {1:d}, {2:d}){3:d}\r\n", mc2.x, mc2.y, mc2.z, mc2.total);
      textBox1.Text += string.Format("({0:d}, {1:d}, {2:d}){3:d}\r\n", mc3.x, mc3.y, mc3.z, mc3.total);
    }
  }
}

解説

MyClass

こちらの記事で作成したクラスと同様のクラスで、x,y,z の3つの座標値と3つの座標値の合計のtotalをメンバ変数に持ちます。今回はクラスにx, y, z, total の4つのプロパティを実装します。プロパティに対応するメンバ変数を ix, iy, iz, itotal とします。メンバ変数は外部からアクセスできないよう、private に設定します。
プロパティは x, y, z のプロパティは読み込み、書き込み両方可能なプロパティとします。x, y, z のプロパティはプロパティの値が設定されるタイミングで、新しい値を利用してtoatlの値を更新します。更新処理はプロパティのgetブロックで実装しています。また、totalは座標の合計値を取得するプロパティのため読み込み専用プロパティとします。

FormMain

フォームではMyClassの宣言とnewによるオブジェクトの作成をします。その後、x, y, z のプロパティに値を設定します。設定後、textBox1にMyClassオブジェクトに設定された情報(座標値 x, y, z と total)を表示します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。クラスに設定された座標値と、3つの座標の数値の合計がテキストボックスに表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-06-30
iPentec all rights reserverd.