惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
博客园 - 聂微东
Application and Cybersecurity Blog
Application and Cybersecurity Blog
MyScale Blog
MyScale Blog
罗磊的独立博客
H
Help Net Security
L
LangChain Blog
T
Threat Research - Cisco Blogs
量子位
S
Securelist
Last Week in AI
Last Week in AI
L
Lohrmann on Cybersecurity
T
The Exploit Database - CXSecurity.com
P
Privacy International News Feed
The Hacker News
The Hacker News
Vercel News
Vercel News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Blog of Author Tim Ferriss
T
Threatpost
Security Latest
Security Latest
P
Palo Alto Networks Blog
Microsoft Security Blog
Microsoft Security Blog
NISL@THU
NISL@THU
F
Full Disclosure
WordPress大学
WordPress大学
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Heimdal Security Blog
J
Java Code Geeks
Recorded Future
Recorded Future
Hugging Face - Blog
Hugging Face - Blog
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
B
Blog RSS Feed
月光博客
月光博客
C
Cisco Blogs
V
Visual Studio Blog
D
DataBreaches.Net
H
Hacker News: Front Page
博客园 - 叶小钗
N
News and Events Feed by Topic
爱范儿
爱范儿
A
Arctic Wolf

博客园 - 数迹

1.winform中App.config配置mssql连接字符串 1.params 关键字 1.创建实体类UserInfo 1. UserInfo表的创建 3.SqlCommand组件 2.在DbHelper.cs 中使用连接字符串 事件委托1 多播委托 委托总结:委托提供了 A类的对象 调用 B类对象的同一类方法 的能力。 委托3--委托声明比较 委托2 文心快码 委托1 sql提示注册表中无 \100\ConfigurationState的解决方法 - 数迹 - 博客园 安装SQL server 提示重新启动计算机失败怎么解决 DataGridView插入指定类型的列 菜单制作过程笔记1 ${pagecontext.request.contextpath}绝对路径理解 eclipse中修改JSP模板中的默认编码 hibernate的ddl-auto属性
where关键字
数迹 · 2026-02-17 · via 博客园 - 数迹

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中的 :根据不同情况,可以读作不同的意思

约束

读作

含义

where T : class

T 必须是​ 类/引用类型

这是 类别​ 要求,不是继承。

where T : struct

T 必须是​ 结构/值类型

这是 类别​ 要求。

where T : new()

T 必须能​ 被 new T()构造

这是 能力​ 要求。

where T : BaseClass

T 必须继承自​ BaseClass

这才是 继承关系

where T : ISomeInterface

T 必须实现​ ISomeInterface 接口

这是 契约/实现​ 关系。

简单总结:

  • :后面是 一个具体的类名​ 时,意思才是 “继承自”

    • where T : Animal// T 必须继承自 Animal 类(比如 Dog, Cat)。

  • :后面是 class, struct, new()​ 这些关键字时,是 对类型本身的特性要求

  • :后面是 一个接口名​ 时,意思是 “必须实现”

    • where T : IDisposable// T 必须实现 IDisposable 接口。

所以,说 where的意思是“继承自” 不准确,它更准确的表述是 “必须满足……条件”​ 或 “受限于……”