2017-03-09 13 views
3

私はVS2017コミュニティを使い始めました。これはバグ私を:C#VS2017のゲッターセッター

以下

は、前のVSから通常のゲッターセッターです:

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

これは新しいゲッターセッターです:構文が変更された理由を

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

誰もが私に説明できますか?

答えて

0

「復帰」構文が削除されていることに気づくでしょう。これは(私が読んだところで)行われました。機能ではないことをより明確にするためです。代理人にすることはできません)ではなく、この種の「擬似関数」(もし私がうまくやっているものを手に入れれば)です。

したがって、基本的には、より明確にするためには、getter is linking this this variableとセッターのための繰り返し。新しいバージョンであなたは、彼らがと一直線にそれを持って来るために追加。また、両方の構文が動作するはず

public int MyInt 
{ 
    get 
    { 
     return x ? y:z; 
    } 
} 

を表し

public int MyInt => x ? y:z;

、そのちょうど新しい構文のような何かを行うことができますので、それはまたです上記の例。

1

構文は変更されていません。改善されました。 C#は、以前のバージョンの構文と文法と常に下位互換性があります。

なぜプロパティゲッタ/セッタをラムダ構文(式付きアクセサ)で実装できるのですか?おそらく科学的な理由はありませんが、言語をより生産的なツールに変えるので、C#で有用な関数型プログラミング構造を導入することについてコンセンサスがあります。

ちょうどC#2.0以降C#の進化をfoillow:通常の方法匿名のデリゲートからとして提供代表者から

  • LINQ、ラムダ形式の代理人/式ツリー。
  • エクスプレッションボディメソッド。
  • ...と式のアクセッサー!おそらく将来のC#のバージョンでは、より機能的なプログラミングスタイルの構文と文法が導入されるでしょう。
2

私は彼らがそれを変更したとは言いませんが、私たちはいくつかの新しい構文オプションを教えてくれたと思います。 getterとsetterを宣言する "古い"方法を使用することもできますが、これを行うためのより機能的なプログラミングスタイルもあります。 C#6で、Microsoftはすでにゲッターのための式を用いて導入やっ専用のプロパティ:

public int SomeProp => someMethod(); 

C#7は、それはゲッターとセッターのために使用されることを可能にするこのサポートを強化しました。これの素晴らしい点の1つは、新しい「スロー式」機能で、簡潔な構文を作ることができます。たとえば、あなたがする前に。

我々は今、これを簡略化することができ

private string _name; 
public string Name 
{ 
    get 
    { 
     return _name; 
    } 
    set 
    { 
     if (value == null) 
      throw new ArgumentNullException(nameof(Name)); 
     _name = value; 
    } 
} 
:でも、セッターラムダをすることなく

private string _name; 
public string Name { 
    get => _name; 
    set => _name = value ?? throw new ArgumentNullException(nameof(Name)); 
} 

は確かに、あなたがthrow式を行うことができますが、あなたが見ることができるように、シンプルなもののため、落札構文は非常に簡潔です。

他のものと同様に、あなたのアプリケーションをコーディングする人のために最もわかりやすい構文を使用してください。マイクロソフトは、C#にますます機能的なプログラミングスタイルの機能を追加しようとしています。これはもう一つの例です。醜い/混乱している/必要のないことがわかった場合は、既存の方法で必要なものすべてを絶対に達成することができます。別の例として、whiledo whileループがあるのはなぜですか?私は正直言って私がdo whileループを私のキャリアで5回使用したと言うことができます。 whileループはすべてdo whileという異なる構文を持つことができます。しかし、do whileを使用するとコードを読みやすくすることがあることに気付くことがあります。