【やさしいC#】lesson5.2 アクセスの制限

C#

privateで保護する

privateを指定すると、クラスの外部から直接アクセスできないようにする。
privateアクセス修飾子です。

class Picture
{
    private Image img;
    private int top;
    private int left;
    ...
}

publicで公開する

publicはクラスの外部からアクセスできるアクセス修飾子です。

        public void SetImage(Image i)
        {
            img = i;
        }
        public Image GetImage()
        {
            return img;
        }

クラスの外部からアクセスできるメソッドを利用するとき、オブジェクトを作成し、画像を変更したり、取得したりするわけです。

            p.SetImage(img);
            pb.Image = p.GetImage();

プロパティの仕組みを知る

  常にSet…Get…という名前のメソッドを定義し、これを使ってフィールドに値を設定することにすると、プログラムが煩雑になってしまう場合があります。
  そこで、フィールドに簡潔にアクセスする方法として用意されてるのが、プロパティ(property)という仕組みです。
  プロパティはsetとgetという名前のフィールド設定・取得専用の処理を用意しておくという仕組みです。この処理はアクセサ(accessor)と呼ばれます。

        public int Top
        {
            set { top = value; }  //プロパティとして値を設定する
            get { return top; }   //プロパティとして値を取得する
        }

構文:プロパティの定義

アクセス指定子 型 プロパティ名
{
set{ 値を設定する処理;}
get{ 値を戻る処理;}
}

プロパティの利用

プロパティ名 = 値;
変数 = プロパティ名;

using System.Windows.Forms;
using System.Drawing;

namespace lesson5
{
    class Sample2
    {
        static void Main(string[] args)
        {
            Form fm = new Form();
            fm.Text = "ようこそC#へ";

            PictureBox pb = new PictureBox();

            Picture p = new Picture();
            p.Move();
            p.Move();

            pb.Image = p.GetImage(); //publicなメソッドを介してフィールドにアクセスします
            pb.Top = p.Top;  //publicなプロパティを介してフィールドにアクセスします
            pb.Left = p.Left;

            pb.Parent = fm;
            Application.Run(fm);
        }
    }
    class Picture
    {
        private Image img;  //privateを指定してクラスの外部からアクセスできないようにします
        private int top;  //privateを指定してクラスの外部からアクセスできないようにします
        private int left;  //privateを指定してクラスの外部からアクセスできないようにします

        public Picture() 
        {
            img = Image.FromFile("E:\\099_Technology\\C#\\csharp\\csharp_train\\lesson2\\google.JPG");
            top = 0;
            left = 0;
        }

        public void Move()
        {
            top = top + 10;
            left = left + 10;
        }
        public void SetImage(Image i)
        {
            img = i;
        }
        public Image GetImage()
        {
            return img;
        }

        public int Top
        {
            set { top = value; }  //プロパティとして値を設定する
            get { return top; }   //プロパティとして値を取得する
        }
        public int Left
        {
            set { left = value; } //プロパティとして値を設定する
            get { return left; }  //プロパティとして値を取得する
        }
    }
}

コメント

タイトルとURLをコピーしました