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
9分50秒
.NET 7で導入されたC# 11では、プロパティに必須キーワードが追加されました。 この記事では、ティム・コーリーの簡潔なビデオチュートリアル".NET 7 Update:10分以内に必須のプロパティを学ぶ"の簡潔なビデオチュートリアルを例に、C# プロパティについて説明します。 プロパティの基本から、新しいrequiredキーワード、初期化ルールの強制に役立つ方法まで、すべてを説明します。
C# では、プロパティによって、フィールドをカプセル化し、オブジェクトのクラス・データ・メンバへのアクセスを管理することができます。 これらのツールは、外部からのアクセスを可能にしながら、データの整合性を確保するために一般的に使用されています。 プライベートフィールドは、プロパティを使用してカプセル化することができ、データへのアクセス方法や変更方法を制御することができます。 パブリック文字列プロパティは、多くの場合、クラスのメンバーを効率的に操作するために、アクセサ(getとset)と呼ばれる特別なメソッドを利用します。 C#の静的プロパティは、クラスをインスタンス化することなくアクセスすることができ、プロパティ値を管理するユニークな方法を提供します。
ここでは、Timがどのように簡単なプロパティの例を設定し、デモンストレーションを行うかを紹介します。
まず、ティムはC# 11を使用した基本的な.NET 7コンソールアプリケーションから始めます。このバージョンでは、以前のバージョン for .NETでは使用できなかった必須キーワードが導入されています。
ティムは、PersonModelクラスを作成します。
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}Public Class PersonModel
Public Property FirstName As String
Public Property LastName As String
End Classこれらのプロパティは、PersonModelが名と姓を保存することを可能にします。 しかし、追加の設定なしでは、LastNameは初期化されない可能性があり、null値を招く危険があります。
プロパティが常に初期化されるようにする一般的な方法は、コンストラクタです。 ティムの例では、彼はLastNameの両方を必要とします。
public PersonModel(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}Public Sub New(firstName As String, lastName As String)
Me.FirstName = firstName
Me.LastName = lastName
End Subこのアプローチにより、LastNameの両方が提供されなければならないことが強制されます。 これらの値を指定せずにPersonModelを作成しようとすると、コンパイラはそれをエラーとしてフラグします。
C# 10および.NET 6以降、C#はnull可能な参照型を導入しました。これはプロパティが初期化されるか、?を使って明示的にNullableとしてマークされる必要があることを意味します。 たとえば、LastNameがnullでありうる場合、次のように定義します。
public string? FirstName { get; set; }
public string? LastName { get; set; }Public Property FirstName As String
Public Property LastName As Stringしかし、ティムの例では、LastNameは常に非nullであると仮定します。 当初、nullabilityは、慎重な初期化またはnullableアノテーションで処理されていましたが、C# 11では、より堅牢なオプションがあります。
コンストラクタが初期化を強制する一方で、C# 11はrequiredキーワードを導入し、特定のプロパティが設定されることをより簡単に保証できるようにします。 requiredを使用すると、個々のプロパティを必須としてマークでき、オブジェクトの初期化時に値を割り当てる必要があります。
ティムは4:15に、PersonModelクラスを次のように修正します。
public class PersonModel
{
public required string FirstName { get; set; }
public required string LastName { get; set; }
}Public Class PersonModel
Public Property FirstName As String
Public Property LastName As String
End Classこれらのプロパティをrequiredでマークすることにより、コンパイラは今やオブジェクト初期化子またはコンストラクタを通じてそれらが設定されることを強制します。 これは、コンストラクタを作成しなくても特定のプロパティを要求できるので便利です。
これで、次のようにPersonModelを作成して初期化できます。
PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };Dim person As New PersonModel With {.FirstName = "Tim", .LastName = "Corey"}LastNameを省略すると、コンパイラはエラーをフラグし、これらの必須プロパティを初期化するよう促します。
ティムは、requiredプロパティとコンストラクタの両方を使用するケースを示します。 必要なプロパティを設定するコンストラクタがある場合、C#は、コンストラクタが呼び出されたときに、それらのプロパティが初期化されていることを確認する必要があります。
そのような場合、SetsRequiredMembers属性を使用して、コンストラクタが必要な条件を満たしていることを示すことができます。 ティムがどのように適用したかを紹介します:
[SetsRequiredMembers]
public PersonModel()
{
FirstName = "Test";
LastName = "Test";
}
[SetsRequiredMembers]
public PersonModel(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}<SetsRequiredMembers>
Public Sub New()
FirstName = "Test"
LastName = "Test"
End Sub
<SetsRequiredMembers>
Public Sub New(firstName As String, lastName As String)
FirstName = firstName
LastName = lastName
End SubSetsRequiredMembersを追加することで、これらのプロパティがコンストラクタ内で設定されることをコンパイラに通知し、初期化エラーを回避します。 この機能は、プロパティがどのように初期化されるかについて柔軟性を持たせながら、偶発的な省略を防ぐのに役立ちます。
ティムは新しいrequiredキーワードがプロパティが常に設定されることを保証するプロセスを簡素化することを説明します。 set メソッドのコンストラクタをあらゆるケースで必要としたり、プロパティが未設定のリスクを冒す代わりに、プロパティ宣言で直接特定の値を要求する簡単な方法があります。
この機能は、特定のフィールドが必須のデータモデルで輝きを放ち、実行時のNULLエラーを防ぐことで、開発プロセスの早い段階で問題を発見するのに役立ちます。
その後ティムは、nullableにできるオプショナルなプロパティEmailを追加しました。
public string? Email { get; set; }Public Property Email As StringEmailプロパティはコンパイラエラーを引き起こさずに未設定のままにできます。 この例でTimは、必須とオプションのデータフィールドを明確に区別したクラスで、柔軟性があることを示しました。
C# 11の必須プロパティの追加は、開発者にとって貴重な機能であり、必須プロパティが常に初期化されることを保証します。 Tim Corey の video は、この機能の優れた紹介と、コンソール アプリケーション内での動作の実演を提供しています。 requiredキーワードとオブジェクト初期化子、およびコンストラクタを組み合わせることで、C#でより堅牢で安全なデータモデルを作成できます。 その他の有益なチュートリアルについては、ティムのYouTubeチャンネルをご覧ください。
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