English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# プロパティ(Property)

属性(Property) はクラス(class)、構造体(structure)およびインターフェース(interface)のネームドメンバーです。クラスや構造体内のメンバーデータやメソッドは フィールド(Field)アクセッサー(accessors) プライベートフィールドの値を読み書き可能または操作可能にする

属性(Property)は、ストレージ位置を決定しません。代わりに、読み書き可能またはその値を計算する アクセッサー(accessors)

例えば、Student という名前のクラスが age、name、code というプライベートフィールドを持っています。これらのフィールドに直接アクセスすることはできませんが、それらのプライベートフィールドにアクセスする属性を持つことができます。

アクセッサー(Accessors)

属性(Property)のアクセサー(accessor)属性にアクセスするための実行可能な命令を含みます。アクセサー(accessor)の宣言には、get アクセサー、set アクセサー、またはその両方を含むことができます。例えば:

// string型の Code 属性を宣言します。
public string Code
{
   get
   {
      return code;
   }
   set
   {
      code = value;
   }
}
// string型の Name 属性を宣言します。
public string Name
{
   get
   {
     return name;
   }
   set
   {
     name = value;
   }
}
// int型の Age 属性を宣言します。
public int Age
{ 
   get
   {
      return age;
   }
   set
   {
      age = value;
   }
}

オンラインサンプル

以下の例では、属性(Property)の使用法を示します:

using System;
namespace w3codebox
{
   class Student
   {
      private string code = "N.A";
      private string name = "not known";
      private int age = 0;
      // string型の Code 属性を宣言します。
      public string Code
      {
         get
         {
            return code;
         }
         set
         {
            code = value;
         }
      }
   
      // string型の Name 属性を宣言します。
      public string Name
      {
         get
         {
            return name;
         }
         set
         {
            name = value;
         }
      }
      // int型の Age 属性を宣言します。
      public int Age
      {
         get
         {
            return age;
         }
         set
         {
            age = value;
         }
      }
      public override string ToString()
      {
         return \ + Code +", Name = \ + Name + ", Age = \ + Age;
      }
    }
    class ExampleDemo
    {
      public static void Main()
      {
         // 新しい Student オブジェクトを生成します。
         Student s = new Student();
            
         // studentのcode、name、ageを設定
         s.Code = "001";
         s.Name = "Zara";
         s.Age = 9;
         Console.WriteLine("Student Info: {0}", s);
         // 年齢を増加
         s.Age += 1;
         Console.WriteLine("Student Info: {0}", s);
         Console.ReadKey();
       }
   }
}

上記のコードがコンパイルされ実行された場合、以下のような結果が得られます:

Student Info: Code = 001, Name = Zara, Age = 9
Student Info: Code = 001, Name = Zara, Age = 10

抽象属性(Abstract Properties)

抽象クラスは抽象属性を持ち、これらの属性は派生クラスで実装されるべきです。以下のプログラムがその点を示しています:

using System;
namespace w3codebox
{
   public abstract class Person
   {
      public abstract string Name
      {
         get;
         set;
      }
      public abstract int Age
      {
         get;
         set;
      }
   }
   class Student : Person
   {
      private string code = "N.A";
      private string name = "N.A";
      private int age = 0;
      // string型の Code 属性を宣言します。
      public string Code
      {
         get
         {
            return code;
         }
         set
         {
            code = value;
         }
      }
   
      // string型の Name 属性を宣言します。
      public override string Name
      {
         get
         {
            return name;
         }
         set
         {
            name = value;
         }
      }
      // int型の Age 属性を宣言します。
      public override int Age
      {
         get
         {
            return age;
         }
         set
         {
            age = value;
         }
      }
      public override string ToString()
      {
         return \ + Code +", Name = \ + Name + ", Age = \ + Age;
      }
   }
   class ExampleDemo
   {
      public static void Main()
      {
         // 新しい Student オブジェクトを生成します。
         Student s = new Student();
            
         // studentのcode、name、ageを設定
         s.Code = "001";
         s.Name = "Zara";
         s.Age = 9;
         Console.WriteLine("Student Info:",- {0}", s);
         // 年齢を増加
         s.Age += 1;
         Console.WriteLine("Student Info:",- {0}", s);
         Console.ReadKey();
       }
   }
}

上記のコードがコンパイルされ実行された場合、以下のような結果が得られます:

Student Info: Code = 001, Name = Zara, Age = 9
Student Info: Code = 001, Name = Zara, Age = 10