読み取り/書き込みプロパティを宣言および使用する方法 (C# プログラミング ガイド)
プロパティは、オブジェクトのデータへの保護されていない、制御されず未確認のアクセスに伴うリスクなしにパブリック データ メンバーの利便性を提供します。 プロパティによって "アクセサー" が宣言されます。これは、基になるデータ メンバーの値を割り当てたり、取得したりする特殊なメソッドです。 set アクセサーはデータ メンバーの割り当てを可能にし、get アクセサーはデータ メンバーの値を取得します。
このサンプルでは、Name
(string) および Age
(int) という 2 つのプロパティを持つ Person
クラスを示します。 両方のプロパティは get
および set
アクセサーを提供するため、読み取り/書き込みプロパティと見なされます。
例
class Person
{
private string _name = "N/A";
private int _age = 0;
// Declare a Name property of type string:
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
// Declare an Age property of type int:
public int Age
{
get
{
return _age;
}
set
{
_age = value;
}
}
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
}
public class Wrapper
{
private string _name = "N/A";
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
}
class TestPerson
{
static void Main()
{
// Create a new Person object:
Person person = new Person();
// Print out the name and the age associated with the person:
Console.WriteLine("Person details - {0}", person);
// Set some values on the person object:
person.Name = "Joe";
person.Age = 99;
Console.WriteLine("Person details - {0}", person);
// Increment the Age property:
person.Age += 1;
Console.WriteLine("Person details - {0}", person);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
*/
信頼性の高いプログラミング
前述の例では、Name
および Age
プロパティはパブリックであり、get
および set
アクセサーの両方が含まれます。 パブリック アクセサーによって任意のオブジェクトはこれらのプロパティを読み書きできます。 ただし、アクセサーのいずれかを除外することが望ましい場合もあります。 set
アクセサーを省略し、プロパティを読み取り専用にできます。
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
また、一方のアクセサーをパブリックに公開し、もう一方を private または protected にすることもできます。 詳細については、「アクセサーのアクセシビリティの制限 (C# プログラミング ガイド)」を参照してください。
プロパティを宣言すると、プロパティをクラスのフィールドとして使用できます。 プロパティでは、プロパティ値の取得と設定の両方で、次のように自然な構文を使用できます。
person.Name = "Joe";
person.Age = 99;
プロパティの set
メソッドでは、特殊な value
変数を使用できます。 この変数には、ユーザーが指定した値が含まれます。たとえば、次のように指定します。
_name = value;
Person
オブジェクトの Age
プロパティの値を増分する場合は、次のような簡潔な構文を使用します。
person.Age += 1;
set
メソッドと get
メソッドがそれぞれ使用されてプロパティがモデル化されている場合、上記と同じ内容のコードは次のようになります。
person.SetAge(person.GetAge() + 1);
この例では、ToString
メソッドが次のようにオーバーライドされます。
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
プログラムでは ToString
が明示的に使用されないことに注意してください。 既定では、WriteLine
呼び出しによって呼び出されます。
関連項目
.NET