当前位置: 首页 > news >正文

typeof()

C# 中的 typeof() 是啥?一句话讲清楚:

typeof() 就是“问编译器:这个类型长啥样?”

它不是运行时去查对象,而是编译时就确定你写的那个“类名、接口名、结构名”到底是谁,然后返回一个叫 Type 的对象,这个对象里装满了这个类型的“身份证信息”。


举个接地气的例子:

你写:

Type t = typeof(string);

翻译成人话就是:

“编译器大哥,帮我查一下 string 这个类型的信息,打包成一个‘类型身份证’给我,我叫它 t。”

这个 t 里有什么?比如:

  • 类型名字:"System.String"
  • 它是不是类?是不是数组?有没有构造函数?
  • 有哪些方法、属性、字段?
  • 它继承自谁?实现了哪些接口?

typeof() 有啥用?实际场景举例:

1️⃣ 反射(Reflection)—— 动态操作类型

你想在程序运行时,根据类型名动态创建对象、调用方法?

Type type = typeof(MyClass);
object obj = Activator.CreateInstance(type); // 动态创建实例

相当于:“我不写死 new MyClass(),而是让程序自己根据类型信息造对象!”

2️⃣ 泛型约束检查

public void DoSomething<T>()
{if (typeof(T) == typeof(string)){Console.WriteLine("传进来的是字符串!");}
}

“我这个泛型方法想知道,用户到底传了个啥类型进来?”

3️⃣ 日志、调试、框架底层

很多框架(比如 ASP.NET Core、EF Core)内部大量使用 typeof() 来获取类型元数据,做路由匹配、数据库映射等。

[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
{// 框架内部会用 typeof(UserController) 来注册路由
}

注意避坑:

  • typeof() 里面只能写类型名,不能写变量!

✅ 正确:

typeof(int)
typeof(List<string>)
typeof(MyClass)

❌ 错误:

string s = "hello";
typeof(s); // 编译报错!s 是变量,不是类型!
  • 如果你想获取某个对象的类型,用 GetType()
string s = "hello";
Type t = s.GetType(); // 运行时获取对象的实际类型

一句话总结区别:

typeof(类型名) → 编译时就知道 → 问的是“类型模板”
对象.GetType() → 运行时才知道 → 问的是“这个具体对象是谁”


通俗总结:

typeof() 就像你去派出所查一个人的“户口本信息”,你只需要提供“姓名”(类型名),就能拿到他的完整档案(Type对象)。
不管这个人有没有出生(对象有没有实例化),户口本早就存在了!

http://www.rkmt.cn/news/7612.html

相关文章:

  • 详细介绍:【C++】C++类和对象—(中)
  • 关于 “Thinking Machines Lab首次发长文” 的一些知识的学习和补充
  • python编程练习(Day4) - 教程
  • CF1630F 题解 | 网络流
  • 攻防世界-secret-galaxy-300 - xxx
  • 实用指南:LeetCode 面试经典 150_哈希表_单词规律(41_290_C++_简单)
  • 代码随想录算法训练营第二天 | leetcode 209
  • mpv硬件解码
  • 2025.9.78——卷6-8选择
  • 好烦
  • 用 Go 语言与 Tesseract OCR 识别英文数字验证码
  • FreeRTOS和LVGL组合使用教程
  • Linux中 sed命令忽略大小写匹配
  • VISA Resource name
  • 交叉编译openharmony版本的gdb
  • 高数
  • office2024免费永久激活版下载安装教程:含激活步骤 + 一键安装包下载
  • 05-条件查询
  • 完整教程:液氮低温恒温器的应用领域
  • 轮转数组-leetcode
  • CF1864G Magic Square
  • OI TRICKS
  • 深入解析:Okular开源免费的跨平台文档查看神器
  • day37大模型程序开发-GraphRAG理论
  • day10-AI短视频01
  • 【每日算法】两数相加 LeetCode - 教程
  • MacCAD2019.dmg 安装包使用教程|Mac电脑安装CAD2019全流程
  • 初始化一个rust环境
  • 编程里边有好多不容易触及的知识点
  • PostgreSQL repmgr 高可用之故障转移