2017-10-22 5 views
1

Code_1(これらのコードの両方が同じ結果を持って、なぜこのコードは、 "=>" を用いている)C#で "get {}"、 "set {}"または "=>"の構文を使用するときに違いはありますか?

public class Infor<TFirst, TSecond, TThird> 
{ 
    private TFirst first; 
    private TSecond second; 
    private TThird third; 

    public TThird Third { get => third; set => third = value; } 
    public TSecond Second { get => second; set => second = value; } 
    public TFirst First { get => first; set => first = value; } 
} 

Code_2(このコードは "=>" "を返す" ではない使用している)

public class Infor<TFirst, TSecond, TThird> 
{ 
    private TFirst first; 
    private TSecond second; 
    private TThird third; 

    public TThird Third { get { return third; } set { third = value; } } 
    public TSecond Second { get { return second; } set { second = value; } } 
    public TFrist First { get { return first; } set { first = value; } } 
} 
+1

これらは意味的に同一です。ちょうど異なる記法。 – JLRishe

+2

ここに、ドキュメントへのリンクがあります:[get(C#Reference)](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/get) – Marius

+2

それはあなたの質問に答えるでしょう。 – CodingYoshi

答えて

4

ませ違いはありません。内部C#コンパイラは、次のシグネチャと実装で放出された方法をコンパイラにMyProperty { get {set {又は構文を変換:

TFirst get_MyProperty() { return first;} 
void set_MyProperty(TFirst value) { first = value; } 

非常に同じことがexpression bodied property accessors呼ばれる=>構文起こります。 =>の使用は、コード化を簡素化し、繰り返し書き出されるべき定型コードを減らすために作成された単なるsyntactic sugarです。

3

これら2つのコードサンプルには違いはありません。 これは、関数からただちに返すことができる結果を持つ内部操作が1つしかない場合は、関数でも機能します。たとえば:

int Method(int x) 
{ 
    return x; 
} 

は同等です:

int Method(int x) => x; 
1

これを処理できるコンパイラには違いがあります。

エクスプレッションボディのプロパティアクセサは、C#7の機能です。たとえば、C#6コンパイラは、それをエラーとみなします。

関連する問題