7

値を設定する get set メソッドを見ました。誰かがこれの目的を教えてもらえますか?

public string HTTP_USER_NAME
{
      get 
      {
            return UserName; 
      }
      set 
      {
            UserName = value; 
      }
}

public string HTTP_USER_PASSWORD
{
      get 
      {
            return UserPwd; 
      }
      set 
      {
            UserPwd = value; 
      }
}

実際、なぜこれらのものを使用するのですか。グローバルアクセスのためですか、それともこの種のことには他の理由がありますか?

4

7 に答える 7

17

それらは単なるアクセサーとミューテーターです。これが、プロパティがC#で実装される方法です

C# 3 では、次のように自動実装されたプロパティを使用できます。

public int MyProperty { get; set; }

setこのコードは、コンパイラによって投稿されたものと同様のコードに自動的に変換されます。このコードは、プロパティを宣言するのが簡単で、またはgetメソッド内にカスタム ロジックを実装したくない場合に理想的です。別のコードを使用することもできます。setプロパティを不変にするメソッドのアクセサ

public int MyProperty { get; private set; }

前のサンプルでMyPropertyは、​​宣言されたクラスの外部でのみ読み取られます。それを変更する唯一の方法は、それを行うメソッドを公開するか、クラスのコンストラクターを使用することです。これは、エンティティの状態の変更を制御および明示する場合に役立ちます。

プロパティにロジックを追加したい場合は、投稿したようにgetandメソッドを手動で実装するプロパティを記述する必要があります。set

カスタム ロジックの実装例

private int myProperty;
public int MyProperty
{
   get
   {
       return this.myProperty;
   }
   set
   {
       if(this.myProperty <=5)
          throw new ArgumentOutOfRangeException("bad user");
       this.myProperty = value;
   }
}
于 2012-05-31T04:12:15.897 に答える
11

ゲッターとセッターの機能を理解しているようで、他の人がその質問に答えました。「通常の」クラス変数 (getter と setter を含まない) は「フィールド」と呼ばれ、「プロパティ」(getter と setter を持つ) はフィールドをカプセル化します。

プロパティの目的は、フィールドへの外部アクセスを制御することです。変数を外部ロジックに対して読み取り専用にしたい場合は、次のようにセッターを省略できます。

private int dataID;

public int DataID {
    get { return dataID; }
}

セッターをプライベートにして、同じ読み取り専用機能を実現することもできます。

オブジェクトが (何らかの理由で) null になる可能性がある場合、次のようにインスタンスが常に存在することを保証できます。

private Object instance;

public Object Instance {
    get {
        if (instance == null)
            instance = new Object();
        return instance;
    }
}

プロパティのもう 1 つの用途は、インデクサーの定義です。

//in class named DataSet

private List<int> members;

public int this[int index] {
    get { return members[index]; }
}

そのインデクサーを定義すると、次のように DataSet のインスタンスにアクセスできます。

int member = dataSet[3];
于 2012-05-31T06:56:22.333 に答える
4

これらのリンクをチェックしてください、..それらは明確な説明を与えます。

http://www.dotnetperls.com/property

http://code.anjanesh.net/2008/02/property-getters-setters.html

UserNameとUserPwdがクラス変数の場合、このように使用することをお勧めします

_userName 
_userPwd
于 2012-05-31T04:20:15.457 に答える
2

C# でプロパティを実装する標準的な方法。UserNameとは、これら 2 つのメソッドが定義されているクラスのUserPwdプライベート メンバー変数 (型) です。string

于 2012-05-31T04:13:36.210 に答える
2

HTTP_USER_NAMEおよびHTTP_USER_PASSWORDは、クラスのパブリック プロパティです。 あなたのプライベートフィールドになる可能性がありますUserNameUserPwdそして、他の人がこれらのパブリック プロパティを介して値を設定または取得できるようにします。私有地への直接アクセスはありません。また、プロパティの get メソッド内でいくつかのロジックを実行することもできます。例: パブリック プロパティが呼び出さAgeれ、その get メソッドで、" " というプライベート フィールドの値を読み取り、dateOfBirth計算を行うことができます ( CurrentYear- dateOfBirth) を取得し、それを Age として返します。

于 2012-05-31T04:15:54.013 に答える
2

プロパティは、フィールドに対する単なるアクセサーです。特定の操作 (必要な場合) を実行できるようにし、フィールドへの制御されたアクセスを提供します。

いつプロパティを使用するか、いつフィールドのみを使用するかを知りたい場合は、リンクのプロパティとフィールドを確認してください - なぜそれが重要なのですか? (ジョナサン・アネジャ)

于 2012-05-31T04:16:40.370 に答える
1

プロパティから(C# プログラミング ガイド)

プロパティは、プライベート フィールドの値を読み取り、書き込み、または計算するための柔軟なメカニズムを提供するメンバーです。プロパティは、パブリック データ メンバーであるかのように使用できますが、実際にはアクセサーと呼ばれる特別なメソッドです。これにより、データへのアクセスが容易になり、メソッドの安全性と柔軟性が向上します。

この例では、TimePeriodクラスに期間が格納されます。このクラスは内部的に時間を秒単位で格納しますが、名前付きプロパティHoursを使用すると、クライアントは時間を時間単位で指定できます。Hours プロパティのアクセサーは、時間と秒の間の変換を実行します。

class TimePeriod
{
    private double seconds;

    public double Hours
    {
        get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}


class Program
{
    static void Main()
    {
        TimePeriod t = new TimePeriod();

        // Assigning the Hours property causes the 'set' accessor to be called.
        t.Hours = 24;

        // Evaluating the Hours property causes the 'get' accessor to be called.
        System.Console.WriteLine("Time in hours: " + t.Hours);
    }
}
// Output: Time in hours: 24

プロパティの概要

  • プロパティを使用すると、実装または検証コードを隠しながら、値を取得および設定するパブリックな方法をクラスで公開できます。

  • getプロパティ アクセサーはプロパティ値を返すために使用され、setアクセサーは新しい値を割り当てるために使用されます。これらのアクセサーは、異なるアクセス レベルを持つことができます。詳細については、「Accessor Accessibility の制限 (C# プログラミング ガイド) 」を参照してください。

  • valueキーワードは、setアクセサーによって割り当てられる値を定義するために使用されます。

  • setアクセサーを実装しないプロパティは読み取り専用です。

  • カスタム アクセサー コードを必要としない単純なプロパティについては、自動実装プロパティを使用するオプションを検討してください。詳細については、自動実装プロパティ (C# プログラミング ガイド)を参照してください。

于 2014-11-18T15:03:39.270 に答える