🐷
[.NET/C#] primary constructor
primary constructor を使った書き方、とそれ以前の書き方を比較して書いてみました。
書く量が減るので、単純なデータクラスとか構造体は、新しい書き方がよさそうな気がします。
伝統的な書き方例
銀行ライブラリにある「取引」クラスの例。
BankLibrary_Taditional.cs
namespace BankLibrary
{
/// <summary>
/// 取引
/// </summary>
public class Transaction
{
/// <summary>
/// 実施日時
/// </summary>
public DateTime RunDateTime { get; set; }
/// <summary>
/// 金額
/// </summary>
/// <remarks>
/// マイナスの場合は出金、プラスの場合は入金。
/// </remarks>
public int Amount { get; set; }
/// <summary>
/// 実行後の残高
/// </summary>
public int ResultBalance { get; set; }
/// <summary>
/// 取引クラスのコンストラクタ
/// </summary>
/// <param name="runDateTime">取引実行日時</param>
/// <param name="amount">取引金額(マイナスの場合は出金、プラスの場合は入金)</param>
/// <param name="resultBalance">取引実行後の残高</param>
public Transaction(DateTime runDateTime, int amount, int resultBalance)
{
this.RunDateTime = runDateTime;
this.Amount = amount;
this.ResultBalance = resultBalance;
}
}
}
primary constructor の例
銀行ライブラリにある「取引」クラスの例。
なお、クラスや構造体での primary constructor は C# 12.0(.NET8) 以降でサポートされています。
BankLibrary_PrimaryConstructor.cs
namespace BankLibrary
{
/// <summary>
/// 取引
/// </summary>
/// <remarks>
/// クラスや構造体での primary constructor は C# 12.0(.NET8) 以降でサポートされています。
/// </remarks>
/// <param name="runDateTime">取引実行日時</param>
/// <param name="amount">取引金額(マイナスの場合は出金、プラスの場合は入金)</param>
/// <param name="resultBalance">取引実行後の残高</param>
public class Transaction(ref readonly DateTime runDateTime, in int amount, in int resultBalance)
{
/// <summary>
/// 実施日時
/// </summary>
public DateTime RunDateTime { get; set; } = runDateTime;
/// <summary>
/// 金額
/// </summary>
/// <remarks>
/// マイナスの場合は出金、プラスの場合は入金。
/// </remarks>
public int Amount { get; set; } = amount;
/// <summary>
/// 実行後の残高
/// </summary>
public int ResultBalance { get; set; } = resultBalance;
}
}
Discussion