required 修饰符
强制调用方设置必要属性。
required 修饰符 是 CoddyKit 上的免费 C# Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。
required 修饰符
required 修饰符要求调用方在创建对象时设置某个属性(或字段)。它会将“忘记提供值”的错误从运行时提前到编译时。
using System;
class Person {
public required string Name { get; init; }
}
var p = new Person { Name = "Ada" };
Console.WriteLine(p.Name); // Ada省略 required 成员会导致编译失败
如果调用方遗漏了 required 成员,编译器会在程序运行之前报告错误。
using System;
class Person {
public required string Name { get; init; }
}
// var bad = new Person { }; // compile error: Name is required
var good = new Person { Name = "Lin" };
Console.WriteLine(good.Name); // Linrequired 与初始化
required 与 init 搭配使用非常自然:该值必须在构造时提供,之后不能再更改。
using System;
class Config {
public required string Url { get; init; }
public int Timeout { get; init; } = 30;
}
var c = new Config { Url = "https://api" };
Console.WriteLine(c.Url + " " + c.Timeout); // https://api 30required 与设置
您也可以将可设置的属性标记为 required。它必须完成初始化,但之后仍然可以更改。
using System;
class Box {
public required int Size { get; set; }
}
var b = new Box { Size = 5 };
b.Size = 10; // still mutable
Console.WriteLine(b.Size); // 10required 字段
字段同样可以标记为 required,而不仅仅是属性。
using System;
class Token {
public required string Value;
}
var t = new Token { Value = "abc123" };
Console.WriteLine(t.Value); // abc123构造函数与 required
如果构造函数设置了 required 成员,调用方使用该构造函数时就不再需要设置它。请使用 [SetsRequiredMembers] 告知编译器。
using System;
using System.Diagnostics.CodeAnalysis;
class Person {
public required string Name { get; init; }
[SetsRequiredMembers]
public Person(string name) => Name = name;
}
Console.WriteLine(new Person("Sam").Name); // Sam混合使用 required 和可选成员
只有标记为 required 的成员是必需的;其他成员仍然是可选的,并使用其默认值。
using System;
class Account {
public required string Owner { get; init; }
public decimal Balance { get; init; } = 0m;
}
var a = new Account { Owner = "Kai" };
Console.WriteLine(a.Owner + " " + a.Balance); // Kai 0继承中的 required
Required 成员会被继承。派生类可以添加自己的 required 成员,并且所有这些成员都必须得到满足。
using System;
class Base { public required int Id { get; init; } }
class Item : Base { public required string Name { get; init; } }
var i = new Item { Id = 1, Name = "Pen" };
Console.WriteLine(i.Id + " " + i.Name); // 1 Pen替代复杂构造函数
required + init 通常可以替代复杂的构造函数:您可以获得必需成员,同时使用易读的对象初始化器语法。
using System;
class Email {
public required string To { get; init; }
public required string Subject { get; init; }
public string Body { get; init; } = "";
}
var e = new Email { To = "a@b.com", Subject = "Hi" };
Console.WriteLine(e.To + " | " + e.Subject); // a@b.com | Hi自我说明的意图
将成员标记为 required 可以说明哪些值是必需的,从而让类型更易于正确使用。
using System;
class Registration {
public required string Username { get; init; }
public required string Password { get; init; }
public bool Newsletter { get; init; }
}
var r = new Registration { Username = "ada", Password = "x" };
Console.WriteLine(r.Username); // ada综合运用
一个结合了 required、可选成员和经过验证的成员的类型。
using System;
class Server {
public required string Host { get; init; }
public int Port { get; init; } = 8080;
public string Address => Host + ":" + Port;
}
var s = new Server { Host = "localhost" };
Console.WriteLine(s.Address); // localhost:8080快速检查
请确认 required 修饰符能够保证什么。
回顾
您已经了解了 required 修饰符。
- 它会强制调用方在创建对象时初始化成员,并由编译器进行检查。
- 它与
init搭配使用,可以创建必需且不可变的成员。 [SetsRequiredMembers]允许构造函数满足这一要求。- Required 成员会被继承。
常见问题解答
「required 修饰符」课时是免费的吗?
是的 — 「required 修饰符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「required 修饰符」这节课中我会学到什么?
强制调用方设置必要属性。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「required 修饰符」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 仅限 init 的 setter
- required 修饰符
- 不可变对象模式
- 记录类型中的 with 表达式