これはC#のドキュメントでよく見かけます。しかし、それは何をしていますか?これはどういう意味ですか?パブリック名{get; set;}
public class Car
{
public Name { get; set; }
}
これはC#のドキュメントでよく見かけます。しかし、それは何をしていますか?これはどういう意味ですか?パブリック名{get; set;}
public class Car
{
public Name { get; set; }
}
それはの省略形です。これはautomatic propertyと呼ばれます。
...フィールドの名前は実際にはC#識別子としては無効な「判読不能な」名前(例: '<> __ name')ですが、これにより、コードからフィールドに直接アクセスできなくなります。仕様用語は「自動的に実装されたプロパティ」ですが、ほとんどの人は実際にそれを自動プロパティと呼んでいます:) –
@phoog:確かにあなたは 'pedantism'を意味しました(またはMarkが指摘したように - 'pedantry' :D – stuxnetting
@stuxnetting "pedantryism"は冗談だった。言ってるだけ'。レコードとすべてのため。 – phoog
自動読み書きプロパティです。それは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; }
}
コンパイラはメンバ変数を生成します。
それはやってのequivilentです:
private string _Text;
public string Text
{
get { return _Text; }
set { _Text = value; }
}
しばらくクラス内のプライベート変数へのアクセス権を持っていない場合を除き。
プライベート変数を保持したい場合は、(あなたの例のように) "古い"形式を使用する必要がありますか? – Rado
これは、自動実装プロパティと呼ばれ、new to C# 3.0です。プロパティへのアクセスに特別な動作や検証が必要ない場合は、より洗練された構文です。だから、コードのかなりの量を節約できますが、あなたは行動やルールを変更する必要がある場合は、アクセサロジックを変更するために、後でオプションを残し
public class Car
{
private string _name;
public string Name
{
get { return _name; }
set {_name = value; }
}
}
:それはの機能と似ています。
概要: 追加のロジックが プロパティアクセサに必要とされないときにC#3.0以降では、自動実装プロパティは 性宣言がより簡潔します。
簡単に言えば、それらはプロパティアクセサーと呼ばれます。それらの実装は以下のように説明できます
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; } } }
(あなたが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プロパティすなわち「スタック」には」 'スタックは、' 文字列 '名前' に格納されて
出力リレー:。
スタック
最初に取得してセットした理由は、設定と取得の両方にアクセサーを1つだけ使用するのではなく、誰も簡単に言い表せないような質問です。 – JsonStatham
なぜこれが重複としてマークされているのですか?これは2009年に尋ねられ、2011年に "オリジナル"が尋ねられました! – Nathangrad