Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C#

C#で見るgetやsetとは?プロパティの基礎についてご紹介

投稿日:2020年12月19日 更新日:

<目次>

(1) C#で見るgetやsetとは?プロパティの基礎についてご紹介
 (1-1) プロパティとは?
 (1-2) プロパティの構文
 (1-3) サンプルプログラム
 (1-4) プロパティの短縮形について

(1) C#で見るgetやsetとは?プロパティの基礎についてご紹介

(1-1) プロパティとは?

プロパティは「privateスコープ」の変数を外部から読み書きするための仕組みです。

プロパティを使う事により、まるで変数が「public」スコープであるかのようにアクセスできますが、それでもなお安全性を確保しています。それを実現しているのが「アクセッサ(Accessors)」と呼ばれるメソッドで、後述する「get」や「set」メソッドが定義されています。
このプロパティの機能は「カプセル化」の概念を実現するための機能になります。「カプセル化」については、記事の末尾章で少し触れたいと思います。
 
次は実際にプロパティの構文やサンプルを見て理解を深めたいと思います。
 

(1-2) プロパティの構文

(構文)

class [クラス名]
{
  private [データ型] [変数名A];  // フィールド  
  public [データ型] [プロパティ名]  // プロパティ
  {
    get { return [変数名A]; }	//ゲッター
    set { [変数名A] = value; }	//セッター
  }
}
(構文補足)
まず[変数名A]と[プロパティ名]については、ベストプラクティスとして同じ名前(プロパティの方は先頭大文字)にする事が推奨されます。

(例)変数名「deptCode」の先頭を大文字にした「DeptCode」がプロパティ名になっている

private string deptCode = "";
public string DeptCode      // プロパティ
プロパティの{ }内部の「get { return [変数名]; }」は「ゲッター」の定義で、メンバ変数の値を返却します(値を取得する時に使う)。
プロパティの{ }内部の「set { [変数名] = value; }」は「セッター」の定義で、メンバ変数に値をセットするためのものです(値のセットに使う)。「value」キーワードは、プロパティに対してセットする値を表しています(次のサンプルで「emp.Name = “Rainbow”」とセットした値など。

(例)ゲッターとセッター

public string DeptCode      // プロパティ
{
    get { return deptCode; }
    set { deptCode = value; }
}

目次にもどる

(1-3) サンプルプログラム

(サンプルプログラム)

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

namespace PropertiesTest2
{
    class Class1
    {
        static void Main(string[] args)
        {
            Employee emp = new Employee();
            emp.Name = "Rainbow";
            Console.WriteLine(emp.Name);
        }
    }
    class Employee
    {
        //privateスコープの変数(フィールド)を宣言
        private string name; 
        
        //プロパティの定義
        //  →プロパティ名はメンバ変数の先頭を大文字にした名前
        public string Name
        {
            //ゲッターはメンバ変数の値を返却
            get { return name; }
            //セッターはメンバ変数に値をセット
            set { name = value; }
        }
    }
}

(図131)実行結果

目次にもどる

(1-4) プロパティの短縮形について

またC#では短縮形の自動プロパティを提供しており、これを使う事でプロパティで使うメンバ変数を宣言せずに済みます(プロパティの中身には「get;」と「set;」のみを記述するだけで良くなる)

(通常表記のプロパティ)
class Employee
{
  private string name; 
  public string Name
  {
    get { return name; }
    set { name = value; }
  }
}

(短縮表記のプロパティ)
メンバ変数の宣言が省略され、ゲッターとセッターは「get; set;」のみと非常にスリムになっています。

class Employee
{
  public string Name  // プロパティ
  {
    get; set;
  }
}

(図141)短縮形の実行結果
(1-3)で紹介したサンプルプログラムのプロパティ部分を短縮形に差し替えて実行した結果をご紹介します。

(参考)カプセル化について
カプセル化は顧客情報などのいわゆる「機微情報」などを守るためのアプローチです。
具体的には下記を実施する事で実現します。

①変数名のスコープをprivateにする。
②publicスコープのgetメソッドとsetメソッド(いわゆるゲッターとセッター)を介してメンバ変数にアクセスするようにする。

カプセル化をする事で、メンバ変数の内容が直接操作できなくなるため、安全性が高まるとともに、例えばgetメソッドのみにすれば読み取り専用にできるなどの柔軟性もあります。

目次にもどる

 

Adsense審査用広告コード


Adsense審査用広告コード


-C#

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

C#で型をStringからintに変更する方法~TryParseメソッドによる型変換~

<目次> (1) C#で型をStringからintに変更する方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) プログラム補足「'{0}’や'{1}’」に …

VisualStudioで文字列の検索をソリューション内やプロジェクト内で行う方法

<目次> (1) VisualStudioで文字列の検索をソリューション内やプロジェクト内で行う方法  (1-1) 検索方法   (1-1-1) 「検索と置換」画面を開く   (1-1-2) 検索条件 …

C#のlockとは?意味や使い方とサンプルプログラムをご紹介

  <目次> (1) C#のlockとは?意味や使い方とサンプルプログラムをご紹介  (1-1) 概要  (1-2) 構文  (1-3) サンプルプログラム  (1-4) lockステートメ …

ASP.NETのbootstrapとは?概要と入手・適用方法のご紹介

  <目次> (1) ASP.NETのbootstrapとは?概要と入手・適用方法のご紹介  (1-1) bootstrapとは?  (1-2) bootstrapの入手方法~プロジェクトへ …

SOAP通信のサンプルをご紹介(ASP.NET Web Service=ASMXを使ったHelloWorld)

  <目次> (1) SOAP通信のサンプルをご紹介(ASP.NET Web Service=ASMXを使ったHelloWorld)  (1-1) SOAP通信とは?  (1-2) SOAP …

  • English (United States)
  • 日本語
Top