Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
10m 40s
C#プロパティは、クラス内でデータがどのようにアクセスされ、保護されるかの中核部分です。 それらはプライベートデータメンバーとパブリックアクセスの間に位置し、開発者が値の読み取りと書き込みを制御することを可能にします。 彼のビデオ"How The New Field Keyword Improves Properties in C# 14 in 10 Minutes or Less"で、Tim CoreyはC# 14が新しいフィールドキーワードを通じて、プロパティの重要な改善をもたらしたことを説明します。
この記事では、Timのビデオをステップごとに確認しながらC#のプロパティについて深く掘り下げます。Timの説明は実用的で、例に基づいており、新しいキーワードが自動実装プロパティをどのように改善し、検証を簡略化し、記述量を減らしつつ、開発者が既に頼りにしている同じ構文を変更しないことを示しています。 ここでの目的は、Timの具体的な理由付けとデモンストレーションに従ってC#プロパティをよりよく理解することです。
Timは、C# 14でのC#プロパティには大規模なアップグレードがあり、ビデオの焦点は自動プロパティが内部でどのように機能するかに影響を与える新しいフィールドキーワードであることを説明しています。 Timはまた、C# 14が.NET 10およびVisual Studio 2026と共に提供されることを述べていますが、機能自体は以前 for .NETバージョンでも動作する可能性があります。
彼はビデオを"この新機能を実際のコードでどのように使用するのか"という1つの特定の質問に答えるための、短く、焦点を絞った説明として構成しています。これにより、プロパティ定義の理論的議論ではなく、実践的なウォークスルーのトーンが設定されています。
約0:23のところで、TimはコンソールアプリケーションにおいてシンプルなパブリッククラスPersonを紹介します。 この人クラスにはいくつかのパブリックプロパティが含まれており、次のようになっています:
public string FirstName
public string LastName
public int Age
Timは、これらが自動実装プロパティ(自動的に実装されたプロパティとも呼ばれます)であると説明します。 コンパイラがバックアップフィールドを舞台裏で自動的に作成するため、可視のプライベート変数やプライベートフィールドはありません。
彼はまた、自動実装されていないDemoプロパティを含めています。 代わりに、プライベートな文字列バックフィールド(_demo)を使用し、getアクセッサのみを使用して読み取り専用プロパティを公開します。 この対比はビデオの後半で重要になります。
Timは次にProgramクラスに移り、パブリックスタティックvoidメイン(またはスタティックvoidメイン文字列argsとして概念的に)内でPersonオブジェクトがどのように作成されるかを示します。 彼は以下を使用して新しい人をインスタンス化します:
new Person { FirstName = "Tim", LastName = "Corey" }
Timは、プロパティはプライベートデータメンバーを隠しつつ、クラス外部からのアクセスを可能にすることを指摘しています。 彼は、姓、年齢、デモなどの値を取得し、プロパティがフィールドのように見える方法を示していますが、それらは実際には内部で特別なメソッドです。
約1:23で、Timは故意に無効な値を割り当てます:
person.LastName = null;
LastNameは必要でありnull許容ではないとマークされていませんが、割り当てはランタイムでも動作します。Timは自動プロパティが無効な値に対して自動的に保護しないことを説明しています。 コンパイラは警告しますが、セットメソッドは引き続き値を受け入れます。
これは自動実装プロパティの主要な問題を示しています: 簡潔である一方で、バリデーションを追加する組み込みの方法を提供しません。 無効なデータは通過し、暗黙のうちに仮定を破ります。
約2:58で、Timは開発者が以前のC#バージョンで行っていたことを示します。 彼はLastNameを次のように完全に実装されたプロパティに変換します:
プライベート文字列のバックアップフィールド
プロパティ値をチェックするセットアクセサ
無効な値に対してスローされる例外
このアプローチはプロパティのアクセサに対して完全な制御を与えますが、Timはそれがどれほど冗長になるかを強調しています。 プロパティは今や数行を取り、自動プロパティの一行シンタックスと比較されます。
彼はまた、自動プロパティから完全なプロパティに切り替えても、プロパティ名、アクセスレベル、および外部使用法が同じであるため、既存のコードが壊れることはないと説明しています。
4:19で、TimはC# 14での重要な改善を紹介します。完全なプロパティを書く代わりに、自動プロパティの構造を維持し、フィールドキーワードを使用してセットアクセサだけを修正します。
Timはフィールドが通常は隠されているコンパイラ生成のプライベートフィールドを表すことを説明しています。 フィールド=値の割り当てにより、開発者は独自のプライベート変数を宣言せずにプロパティ値を傍受して検証できます。
これにより、開発者が慣れ親しんでいるシンタックスを維持しながら柔軟性が追加されます。 Timは、これが自動プロパティと完全なプロパティの間に位置し、コードを削減しながら検証ロジックを可能にすることを説明しています。
Timはフィールドキーワードがそれが登場するプロパティにスコープ化されていることを説明しています。 各プロパティには独自のバックアップフィールドがあり、クロスプロパティの干渉のリスクはありません。
同じシンタックスが別のプロパティに使用される場合—例えばFirstName—それはそのプロパティの独自のバックアップフィールドを指します。 この機能は予測可能であり、複数のパブリックプロパティで安全に使用できます。
約6:16で、Timは同じアプローチをパブリックint Ageプロパティに適用します。 彼は無効な負数値を割り当て、なぜそれが許されるべきでないかを説明します。
例外をスローする代わりに、Timは異なる戦略を示します:無効な値を無視します。 セットメソッドは、値が有効な範囲内にあるかどうかをチェックしてから、フィールドにそれを割り当てます。
これは、新しいアプローチがプライベートint年齢、数値の検証、および条件付きロジックに対して、プロパティを完全な実装に変換せずに同様にうまく機能することを示しています。
その後、ティムは命名衝突という潜在的なエッジケースについて議論します。 クラスにすでにfieldという名前の変数が含まれている場合、プロパティ内での新しいキーワードと衝突する可能性があります。
彼はこれがどのようにして混乱と予期しない動作を引き起こすかを示しています。 ティムは、変数をthis.fieldまたは@fieldを使用して明示的に参照することで解決することを説明します。 これは、変数名とバックフィールドキーワードを区別します。
ティムは、特に既存のコードベースをアップグレードする際には、良いプラクティスとしてそのような変数の名前を変更することを強くお勧めします。
ティムは、fieldキーワードがプロパティアクセサ内でのみ特別な意味を持つことを明確にします。 コンストラクタ、メソッド、またはクラスの他の部分では、fieldは通常の変数のように振る舞います。
この区別は、コンパイラが生成したバックフィールドが存在する時と存在しない時を開発者が理解するのに役立ちます。
ティムは、新しいfieldキーワードがどのように機能し、なぜC#のプロパティを改善するのかを要約するビデオを終了します。 これは、開発者が自動プロパティを使用し続けながら、検証、制御、および明確さを追加できるようにします。
彼は視聴者にこの機能を試し、コードスタイルにどのように適合するかを探り、命名規則について慎重に考えることを奨励します。 ティムは、この変更が不要な複雑さを追加することなくプロパティをより表現豊かにすることを強調しながらビデオを終了します。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy