C# プロパティ (取得および設定)
プロパティとカプセル化
プロパティの説明を始める前に、"カプセル化"について基本を理解しておく必要があります。
カプセル化の意味は、「機密」データがユーザーから隠されていることを確認することです。これを達成するには、次のことを行う必要があります。
- フィールド/変数を
privateとして宣言します。 privateフィールドの値にアクセスして更新するための、プロパティを通じてpublicのgetとsetメソッドを提供します。
プロパティ
前の章で学んだことは、private変数は同じクラス内でのみアクセスできます(外部クラスはアクセスできません)。
ただし、それらにアクセスする必要がある場合もあります。
これはプロパティで行うことができます。
プロパティは変数とメソッドを組み合わせたようなもので、次のgetメソッドとsetメソッドの2つのメソッドがあります。
例
{.language-csharp .techis-white}
class Person
{
private string name; // field
public string Name // property
{
get { return name; } // get method
set { name = value; } // set method
}
}例の説明
Nameプロパティはnameフィールドに関連付けられています。
プロパティとプライベート フィールドの両方に同じ名前を使用しますが、最初の文字は大文字にする事を推奨します。
getメソッドはname変数の値を返します。
setメソッドはvalueにname変数を設定します。
valueキーワードは、プロパティに割り当てる値を表します。
よくわからない場合は、以下の例を見てください。
これでNameプロパティを使用し、Personクラスのprivateフィールドにアクセスして更新できるようになりました。
例
{.language-csharp .techis-white}
class Person
{
private string name; // field
public string Name // property
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
出力は次のようになります。
Liam自動プロパティ (省略形)
C#はまた、プロパティのフィールドを定義する必要がなく、記述するだけでよい省略形/自動プロパティを使用する方法を提供します。プロパティ内部にget;とset;を記述するだけです。
次の例は、上記の例と同じ結果を生成します。唯一の違いは、コードが少ないことです。
例
自動プロパティの使用
{.language-csharp .techis-white}
class Person
{
public string Name // property
{ get; set; }
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
出力は次のようになります。
Liamカプセル化する理由
- クラスメンバーのより良い制御(自分 (または他の人)がコードを台無しにする可能性を減らします)
- フィールドが作れる読み取り専用(
getメソッド使用する場合)、または書き込み専用(set使用する場合) - 柔軟性: プログラマーは、他の部分に影響を与えることなく、コードの一部を変更できます
データのセキュリティの向上