C#的required關(guān)鍵字的具體使用
在 C# 11 中引入了 required 關(guān)鍵字,用于強(qiáng)制要求某些屬性或字段在對象初始化時必須被顯式賦值。這一特性增強(qiáng)了代碼的安全性,確保關(guān)鍵成員不會被遺漏初始化,同時保持了對象初始化的靈活性(例如使用對象初始化器)。
核心概念
- 作用:標(biāo)記類或結(jié)構(gòu)體中的屬性/字段為“必須初始化”的成員。
- 強(qiáng)制賦值:創(chuàng)建對象時,必須為所有
required成員提供初始值,否則編譯器報錯。 - 兼容性:可與構(gòu)造函數(shù)、對象初始化器(
new Type { Prop = value })結(jié)合使用。 - 與構(gòu)造函數(shù)的對比:相比通過構(gòu)造函數(shù)參數(shù)強(qiáng)制初始化,
required允許更靈活的初始化方式(如按名稱賦值)。
基本用法
1. 定義required成員
public class Person
{
public required string Name { get; set; }
public required int Age { get; set; }
}
2. 初始化時必須賦值
// 正確:通過對象初始化器賦值
var person = new Person { Name = "Alice", Age = 30 };
// 錯誤:缺少 Age 的賦值
var invalidPerson = new Person { Name = "Bob" }; // 編譯錯誤!
與構(gòu)造函數(shù)的協(xié)作
若構(gòu)造函數(shù)已初始化 required 成員,需標(biāo)記 [SetsRequiredMembers] 特性,避免重復(fù)賦值:
public class Person
{
public required string Name { get; set; }
public required int Age { get; set; }
[SetsRequiredMembers]
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
// 調(diào)用構(gòu)造函數(shù)時,無需再初始化 required 成員
var person = new Person("Alice", 30);
注意事項(xiàng)
- 適用類型:
required可用于屬性或字段,支持引用類型和值類型。 - 不可省略:未初始化
required成員會導(dǎo)致編譯錯誤。 - 與 Nullable 的協(xié)作:
public required string? OptionalDescription { get; set; } // 允許可為 null 的 required 成員 - 版本要求:需使用 C# 11 或更高版本(.NET 7+)。
使用場景
- 替代多參數(shù)構(gòu)造函數(shù):當(dāng)類有大量必填屬性時,避免編寫冗長的構(gòu)造函數(shù)。
- 明確初始化責(zé)任:強(qiáng)制調(diào)用方為關(guān)鍵屬性提供值,減少運(yùn)行時錯誤。
- DTO 或配置對象:確保反序列化或配置綁定時必要字段被賦值。
示例:靈活初始化
public class Configuration
{
public required string ApiKey { get; set; }
public int Timeout { get; set; } = 30; // 非 required,可省略(使用默認(rèn)值)
}
// 初始化時只需賦值 ApiKey
var config = new Configuration { ApiKey = "secret-key" };
通過 required 關(guān)鍵字,C# 提供了一種更直觀、安全的方式確保對象初始化的完整性,尤其適用于現(xiàn)代 API 設(shè)計(jì)和數(shù)據(jù)模型定義。
到此這篇關(guān)于C#的required關(guān)鍵字的具體使用的文章就介紹到這了,更多相關(guān)C# required關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談C#下winform和JS的互相調(diào)用和傳參(webbrowser)
下面小編就為大家?guī)硪黄獪\談C#下winform和JS的互相調(diào)用和傳參(webbrowser)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件
這篇文章主要介紹了C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
解析在內(nèi)部循環(huán)中Continue外部循環(huán)的使用詳解
本篇文章是對在內(nèi)部循環(huán)中Continue外部循環(huán)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

