


















where在 C# 中用于为泛型(类、方法等)的类型参数添加约束,限制它必须满足的条件。
where的意思是“继承自” 不准确,它更准确的表述是 “必须满足……条件” 或 “受限于……”。
常见约束:
where T : class→ T 必须是引用类型(如类、接口、数组)。
where T : struct→ T 必须是值类型(如 int、struct)。
where T : new()→ T 必须有无参构造函数。
where T : BaseClass→ T 必须继承自某个基类。
where T : ISomeInterface→ T 必须实现某个接口。
作用:
让你在泛型代码中安全地使用类型 T的特定功能(如调用方法、创建实例等)。
例子:
csharp
复制
public class Example<T> where T : class, new()
{
// 这里知道 T 是引用类型且有无参构造函数
public T CreateItem() => new T();
}
意思就是继承自是吧?
不完全是。
“继承自”只是其中一种情况,而 where约束的含义更广。
您可以这样理解: where T : XXX中的 :根据不同情况,可以读作不同的意思
|
约束 |
读作 |
含义 |
|---|---|---|
|
|
T 必须是 类/引用类型 |
这是 类别 要求,不是继承。 |
|
|
T 必须是 结构/值类型 |
这是 类别 要求。 |
|
|
T 必须能 被 |
这是 能力 要求。 |
|
|
T 必须继承自 BaseClass |
这才是 继承关系。 |
|
|
T 必须实现 ISomeInterface 接口 |
这是 契约/实现 关系。 |
简单总结:
当 :后面是 一个具体的类名 时,意思才是 “继承自”。
where T : Animal// T 必须继承自 Animal 类(比如 Dog, Cat)。
当 :后面是 class, struct, new() 这些关键字时,是 对类型本身的特性要求。
当 :后面是 一个接口名 时,意思是 “必须实现”。
where T : IDisposable// T 必须实现 IDisposable 接口。
所以,说 where的意思是“继承自” 不准确,它更准确的表述是 “必须满足……条件” 或 “受限于……”。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。