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

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

関連記事

ASP.NETでビュー(View)に複数のモデル(Model)を連携する方法

  <目次> (1) ASP.NETでビュー(View)に複数のモデル(Model)を連携する方法  (1-1) やりたい事の整理  (1-2) ViewModelを使った複数モデルの連携 …

C#のIComparerの実装方法や用法について(サンプルプログラムあり)

<目次> (1) C#のIComparerの実装方法や用法について  (1-1) IComparerの概要  (1-2) STEP0:比較をするクラスの定義  (1-3) STEP1:ICompare …

C#のDB接続時のエラー(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server)

<目次> (1) 記事の目的  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対策   (1-3-1) SQLServer:リモート接続を有効化   (1-3-2) SQLSe …

C#のエラー「CS1069~このアセンブリへの参照を追加する事を検討してください」の対処方法+実際のソース例も掲載

<目次> (1) C#のエラー「CS1069~このアセンブリへの参照を追加する事を検討してください」の対処方法  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 対処法 (1 …

C#のvarの使いどころは?初めての方に向けてサンプルプログラムを使ってご紹介

<目次> (1) C#のvarの使いどころは?初めての方に向けてサンプルプログラムを使ってご紹介  (1-1) ArrayListに異なるデータ型が混在しているパターン  (1-2) LINQのクエリ …

  • English (United States)
  • 日本語
Top