0

アクセス修飾子の目的は、データメンバーを不正アクセスから隠すことです。プロパティの目的は、Access修飾子を公開することです。アクセス修飾子の目的がなくなる場所。以下はその例です。

public class Employee
{
    private int EmployeeID;
    private string Name;
    private int Salary;

    public int EID { get { return this.EmployeeID; } set { this.EmployeeID = value; } }
    public string EName { get { return this.Name; } set { this.Name = value; } }
    public int ESalary { get { return this.Salary; } set { this.Salary = value; } }
}

static void Main(string[] args)
{
    Employee Employee = new Employee();
    Employee.EName = "Zaheer";
}

ここで、Nameに間接的にアクセスするプロパティENameにアクセスできます。質問がばかげている場合、コメントは申し訳ありません。

4

4 に答える 4

2

プライベート フィールドの考え方は、その値が型の外部から何かによって変更される方法がまったくないということではありません。それが本当なら、彼らはまったく役に立たないでしょう。プライベート フィールドの考え方は、型の外部からのメンバー自体への直接アクセスは禁止されていますが、一部の非プライベート メンバーを介した限定的な間接アクセスは許可できるというものです。これらのパブリック メンバーは、パブリック アクセスよりも限定的なフィールド アクセス手段を提供します。

あなたの特定の例では、実際にはあまり制限が行われていません。値は、インスタンスを持つ誰でもいつでもアクセスでき、インスタンスを持つ誰でもいつでも設定できます。フィールドをパブリックに公開するよりも、まだ少し保護されています。たとえばref、メソッドのパラメーターを介してフィールドへの参照を直接作成することはできませんが、保護がほとんど追加されていないと言っても過言ではありません。フィールドを変更する外部エンティティの機能が何らかの形で制限されている場合、これは非常に便利です。おそらく、値を取得して設定することはできず、特定の値をまったく設定できない可能性があります。メソッドが呼び出されたときに、外部エンティティによって直接指定されたことのない方法で変更される可能性があります。

結局のところ、メソッド/プロパティの定義によって、基礎となるフィールドへのアクセスのレベルが決まるという考えです。アクセスのレベルは、ほぼ完全なものからほとんど何もないものまでさまざまです。

于 2013-03-20T14:55:42.810 に答える
1

プロパティは実際には、フィールドの値を返したり設定したりするメソッドのシンタックス シュガーです。したがって、いくつかの利点があります。

  1. プロパティは、追加のチェックを実行できます。EID同様に、負の値またはEName空の文字列に設定しようとする試みをキャッチできます。
  2. プロパティは、オブジェクトの内部データの一貫性を保つために、一度に複数のフィールドを設定できます。
  3. プロパティはインターフェイスで使用できますが、フィールドは使用できません。
  4. プロパティは、getter と setter に対して個別のアクセス修飾子を持つことができます。

ただし、メソッドを呼び出すオーバーヘッドがないため、フィールドを設定する方が効率的です。

于 2013-03-20T14:33:27.460 に答える
1

サンプル プロパティはすべて非常に単純で、自動プロパティに置き換えることができます。プロパティは、フィールドを公開するだけでなく、フィールドへのアクセスを制御するために使用されます。

たとえば、 というプロパティがある場合、EmailAddress割り当てられる前に、適切な電子メール アドレスの値を確認することができます。プロパティのセッターでそれを処理し、無効な値を拒否できます。フィールドを直接公開する場合、クラス内でこれを制御することはできません。

これはプロパティの明らかな用途の 1 つですが、フィールドを使用する場合には他にも用途や利点があります。

于 2013-03-20T14:34:23.260 に答える