0

私はこのプロパティを持っています

    /// <summary>
    /// The production date of the device is contained in its serial number.
    /// </summary>
    public DateTime Date
    {
        get 
        {
            return SerialNumber.Date;
        }
    }

しかし、私はこのように書くことができると期待しています

    /// <summary>
    /// The production date of the device is contained in its serial number.
    /// </summary>
    public DateTime Date
    {
        get return SerialNumber.Date;
    }

しかし、エラーが表示されます{ or ; expected

ここで私の質問は、コードが 1 行しかないため、スコープの開始と終了をマークしたくないのに、なぜここで中括弧が必要なのかということです。

中括弧を使用する必要があることは実際には問題ではありません。しかし、私の意見では、C# コードの残りの解釈とは一致しません。

if(DoNotUseBraces) return null;たとえば、ブレースは必要ありません。 あるいは

if (SomeBoolean)
    return null;

繰り返しますが、ブレースは必要ありません。私はそれと同じだと思います:なぜステートメントが1つしかないメソッドにブレースが必要なのですか? get()しかし、 getは () のように実装しません。

4

3 に答える 3

3

これらのブラケットはスコープ ブロック用ではなく、構文の一部です。セッターとゲッターは実際にはメソッドなので、関数の構文に似ています。

ステートメントの場合if、ブラケットは構文の一部ではありません。

if (<condition>) <statement>

プロパティ ゲッターの場合、括弧は構文の一部です。

<type> <identifier> { get { <statements> } }

関数の場合と同じように:

<type> <identifier>(<parameters>) { <statements> }
于 2013-06-12T09:52:39.883 に答える
3

C# のプロパティはセッターを持つこともできるため、次のようになります。

public DateTime Date
{
    get return SerialNumber.Date;
    set SerialNumber.Date = value;
}

それはうまくいきません。ゲッターはどこで終わり、セッターはどこで始まりますか?

複数の行を追加しても、これらのスコープは明確です。

public DateTime Date
{
    get { return SerialNumber.Date; }
    set { SerialNumber.Date = value; }
}

ここで私の質問は次のとおりです。コードが 1 行しかないため、スコープの開始と終了をマークしたくないのに、なぜここで中括弧が必要なのですか。

C# コンパイラ チームにとって、ワン ライナー プロパティにあると便利なものを実装するのは大変な作業だったと思います。

于 2013-06-12T09:46:51.597 に答える
1

それは単なる言語設計であり、そのように考えられています。ランボルギーニの車のドアは、他の車のように横に開くのではなく、上に開くという事実に懸念を抱くようなものです。それはすべて言語設計に関するものです。

この質問に対する完全なJon Skeetの回答については、これを説明する言語仕様の正確な場所を指して、以下を参照してください。

なぜこのコンパイルエラー

于 2013-06-12T09:46:28.423 に答える