2009-08-21 9 views

答えて

40

それはの省略形です。これはautomatic propertyと呼ばれます。

+9

...フィールドの名前は実際にはC#識別子としては無効な「判読不能な」名前(例: '<> __ name')ですが、これにより、コードからフィールドに直接アクセスできなくなります。仕様用語は「自動的に実装されたプロパティ」ですが、ほとんどの人は実際にそれを自動プロパティと呼んでいます:) –

+0

@phoog:確かにあなたは 'pedantism'を意味しました(またはMarkが指摘したように - 'pedantry' :D – stuxnetting

+0

@stuxnetting "pedantryism"は冗談だった。言ってるだけ'。レコードとすべてのため。 – phoog

10

自動読み書きプロパティです。それはC#3.0の追加です。次のようなものがあります。

public class Car { 
    private string name; 
    public string Name { get { return name; } set { name = value; } } 
} 

ただし、バッキングフィールドに直接アクセスすることはできません。

private string _name; 

public string Name 
{ 
    get { return _name; } 
    set { _name = value; } 
} 

コンパイラはメンバ変数を生成します。

3

それはやってのequivilentです:

private string _Text; 

public string Text 
{ 
    get { return _Text; } 
    set { _Text = value; } 
} 

しばらくクラス内のプライベート変数へのアクセス権を持っていない場合を除き。

+1

プライベート変数を保持したい場合は、(あなたの例のように) "古い"形式を使用する必要がありますか? – Rado

4

これは、自動実装プロパティと呼ばれ、new to C# 3.0です。プロパティへのアクセスに特別な動作や検証が必要ない場合は、より洗練された構文です。だから、コードのかなりの量を節約できますが、あなたは行動やルールを変更する必要がある場合は、アクセサロジックを変更するために、後でオプションを残し

public class Car 
{ 
    private string _name; 
    public string Name 
    { 
    get { return _name; } 
    set {_name = value; } 
    } 
} 

:それはの機能と似ています。

1

Auto-Implemented Properties

概要: 追加のロジックが プロパティアクセサに必要とされないときにC#3.0以降では、自動実装プロパティは 性宣言がより簡潔します。

25

簡単に言えば、それらはプロパティアクセサーと呼ばれます。それらの実装は以下のように説明できます

1.get {return name} プロパティがの場合、の場合、getアクセサのコードブロックが実行されます。

2.set {name = value} プロパティがの場合、セットアクセサーのコードブロックが実行されます。に新しい値が設定されています。

例://クラスのインスタンスまたはオブジェクト を作成する ';あなたは

人物P =新しい人()以下のように、このプロパティを参照するとき、今すぐ

class Person 
{ 
    private string name; // the name field 
    public string Name // the Name property 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 
} 
  1. (あなたがC#を使用していると仮定) 「クラスの「P人

    System.Console.Write(p.Name); //The get accessor is invoked here 
    

getアクセサーが呼び出されと読み込まれます。プロパティの値、つまりコンパイラーは文字列 'name'の値を読み取ろうとします。

Person p = new Person(); 
p.Name = "Stack" // the set accessor is invoked here 
Console.Writeline(p.Name) //invokes the get accessor 
Console.ReadKey(); //Holds the output until a key is pressed 

以下のように「名前」プロパティに

たら、2.あなた割り当て(引数を使用して)値のセットアクセサ割り当て値Nameプロパティすなわち「スタック」には」 'スタックは、' 文字列 '名前' に格納されて

出力リレー:。

スタック

+6

最初に取得してセットした理由は、設定と取得の両方にアクセサーを1つだけ使用するのではなく、誰も簡単に言い表せないような質問です。 – JsonStatham

関連する問題