次の方法で共有


set キーワード (C# リファレンス)

set キーワードは、プロパティまたはインデクサーで、プロパティ値またはインデクサーの要素値を割り当てる "アクセサー" メソッドを定義します。 詳細と例については、「 PropertiesAutomatically で実装されるプロパティ、および Indexersを参照してください。

プロパティの get アクセサーと set アクセサーがプライベート バッキング フィールドの値を設定または取得する以外の操作を実行しない単純な場合は、自動的に実装されるプロパティを使用できます。 次の例では、 Hours を自動的に実装されるプロパティとして実装します。

class TimePeriod3
{
    public double Hours { get; set; }
}

重要

インターフェイス プロパティ宣言または partial プロパティの実装宣言では、自動的に実装されるプロパティは使用できません。 コンパイラは、自動的に実装されたプロパティに一致する構文を、実装宣言ではなく宣言宣言として解釈します。

アクセサー本体の 1 つを実装する必要がある場合があります。 C# 13 のプレビュー機能として追加された field キーワードは、フィールドに基づくプロパティを宣言します。 フィールドに基づくプロパティを使用すると、コンパイラが一方のアクセサーを生成しながら、もう一方のアクセサーを手動で作成できます。 field キーワードを使用して、コンパイラ合成バッキング フィールドにアクセスします。

class TimePeriod4
{
    public double Hours {
        get;
        set => field = (value >= 0)
            ? value
            : throw new ArgumentOutOfRangeException(nameof(value), "The value must not be negative");
    }
}

重要

field キーワードは、C# 13 のプレビュー機能です。 fieldコンテキスト キーワードを使用するには、.NET 9 を使用し、<LangVersion>要素をプロジェクト ファイルにpreviewするように設定する必要があります。

field という名前のフィールドがあるクラスでは、field キーワード機能を使用する場合は注意が必要です。 新しい field キーワードは、プロパティ アクセサーのスコープ内の field という名前のフィールドをシャドウします。 field変数の名前を変更するか、@ トークンを使用してfield識別子を@fieldとして参照できます。 詳細については、field キーワード機能の仕様を参照してください。

多くの場合、前の例のように、set アクセサーは値を割り当てる 1 つのステートメントで構成されます。 式形式のメンバーとして set アクセサーを実装できます。 次の例では、get アクセサーと set アクセサーの両方を、式形式のメンバーとして実装しています。

class TimePeriod2
{
    private double _seconds;

    public double Seconds
    {
        get => _seconds;
        set => _seconds = value;
    }
}

次の例では、Seconds という名前のプロパティの get アクセサーと set アクセサーを定義しています。 また、_seconds という名前のプライベート フィールドを使って、プロパティの値を戻しています。

class TimePeriod
{
    private double _seconds;

    public double Seconds
    {
        get { return _seconds; }
        set
        {
            if (value < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(value), "The value of the time period must be non-negative.");
            }
            _seconds = value;
        }
    }
}

C# 言語仕様

詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

関連項目