news 2026/6/9 21:58:46

C# GetType的常规用法汇总

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C# GetType的常规用法汇总

GetType()是 C# 中继承自Object的核心方法(返回实例的System.Type对象),看似简单,却能在反射、资源加载、通用逻辑、类型判断等场景发挥关键作用,以下是它的高频 “妙用” 场景,结合实际代码示例说明:

一、场景 1:动态加载嵌入资源(通用嵌入资源加载工具)

/// <summary> /// 通用方法:加载当前类所在命名空间下的嵌入资源 /// </summary> /// <param name="resourceName">资源文件名(如 "config.json")</param> /// <returns>资源流</returns> public Stream LoadEmbeddedResource(string resourceName) { // GetType() 动态获取当前类的命名空间,拼接资源路径 string fullResourceName = $"{GetType().Namespace}.{resourceName}"; return GetType().Assembly.GetManifestResourceStream(fullResourceName); } // 调用(无需关心命名空间,直接用) // 加载同命名空间下的 config.json using (var stream = LoadEmbeddedResource("config.json")) using (var reader = new StreamReader(stream)) { string config = reader.ReadToEnd(); }

优势:重命名命名空间 / 移动文件时,代码无需修改,自动适配。

二、场景 2:反射动态创建实例(通用工厂模式)

/// <summary> /// 通用方法:创建任意类型的实例(需无参构造函数) /// </summary> /// <typeparam name="T">基类/接口</typeparam> /// <param name="instance">示例实例(用于获取目标类型)</param> /// <returns>新实例</returns> public T CreateInstance<T>(T instance) { // GetType() 获取实例的具体类型(而非泛型 T) Type targetType = instance.GetType(); // 动态创建实例(替代硬编码 new XXX()) return (T)Activator.CreateInstance(targetType); } // 调用示例 var editTextTool = new ToolEditText(); // 动态创建 ToolEditText 实例(无需写死类型) var newTool = CreateInstance(editTextTool);

适用场景:插件化开发、配置化创建对象(如从配置文件读取类型名,结合Type.GetType()+ 反射创建)。

三、场景 3:精准的类型判断(避免 “父类 / 子类” 判断陷阱)

public class DrawTool { } // 基类 public class ToolEditText : DrawTool { } // 子类 // 测试代码 DrawTool tool1 = new DrawTool(); DrawTool tool2 = new ToolEditText(); // is 关键字:判断是否兼容(tool2 是 ToolEditText,也是 DrawTool) Console.WriteLine(tool2 is DrawTool); // true Console.WriteLine(tool2 is ToolEditText); // true // GetType():精准判断实际类型 Console.WriteLine(tool1.GetType() == typeof(DrawTool)); // true Console.WriteLine(tool2.GetType() == typeof(DrawTool)); // false(实际是 ToolEditText) Console.WriteLine(tool2.GetType() == typeof(ToolEditText)); // true

妙用场景:绘图工具中,判断用户当前选中的是 “文本工具” 还是 “矩形工具”,避免误判。

五、场景 5:动态调用类型专属方法(反射 + GetType ())

public class ToolEditText : DrawTool { public void InitEditTextTool() { Console.WriteLine("文本工具初始化"); } } public class ToolRectangle : DrawTool { public void InitRectangleTool() { Console.WriteLine("矩形工具初始化"); } } /// <summary> /// 通用初始化方法:动态调用各工具的专属初始化方法 /// </summary> /// <param name="tool">任意绘图工具</param> public void InitTool(DrawTool tool) { Type toolType = tool.GetType(); // 查找以 "Init" 开头的初始化方法 var initMethod = toolType.GetMethod($"Init{toolType.Name}"); if (initMethod != null) { initMethod.Invoke(tool, null); // 动态调用 } } // 调用 InitTool(new ToolEditText()); // 输出:文本工具初始化 InitTool(new ToolRectangle()); // 输出:矩形工具初始化

结合GetType()和反射,可动态调用实例的专属方法,无需提前知道类型

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:57:31

WordPress用户注册与会员插件跨站脚本漏洞深度解析

CVE-2025-13367&#xff1a;CWE-79 网页生成期间输入中和不当&#xff08;跨站脚本&#xff09;漏洞 - 涉及wpeverest用户注册与会员插件 严重性&#xff1a; 中等 类型&#xff1a; 漏洞 CVE编号&#xff1a; CVE-2025-13367 WordPress 的“用户注册与会员 – 自定义注册表单构…

作者头像 李华
网站建设 2026/6/9 19:17:24

spaCy v3 设计概念与技术架构详解

spaCy 是一个用于工业级自然语言处理的流行开源 Python 库。spaCy v3.0 引入了新的基于 Transformer 的流水线&#xff0c;将 spaCy 的准确度提升至当前最先进水平&#xff0c;并配备了一个全新的训练配置和工作流系统&#xff0c;以帮助你将项目从原型阶段推进到生产环境。在本…

作者头像 李华
网站建设 2026/6/10 7:52:41

让实训“活”起来:汽车塑料件拆装与修复仿真教学软件

在汽车专业技能教学中&#xff0c;保险杠等塑料件的拆装与修复一直是实训的关键环节。然而&#xff0c;受限于设备数量、场地规模与课时安排&#xff0c;许多学生往往难以获得充分的实操机会。为此&#xff0c;我们设计并开发了一款专注于**汽车塑料件拆装与修复的仿真教学软件…

作者头像 李华
网站建设 2026/6/10 7:52:15

开放式耳机也有好音质!南卡Bolt头戴式蓝牙耳机,音质舒适全都要

在各种类型的耳机中&#xff0c;开放式耳机曾长期被贴上"听个响"标签。当传统入耳式耳机通过物理密封实现低频强化时&#xff0c;开放式耳机却因声波扩散特性被认为难以呈现饱满和富有沉浸感的真实听感&#xff0c;所以被很多人觉得“方便是方便&#xff0c;但音质不…

作者头像 李华
网站建设 2026/6/9 21:08:09

研究生必备:8款AI论文写作神器,轻松搞定毕业论文,科研无忧!

如果你是那个正在宿舍、图书馆或出租屋里&#xff0c;对着空白的Word文档抓耳挠腮&#xff0c;看着日历上日益逼近的提交Deadline而彻夜难眠的研究生&#xff1b;如果你是那个被导师的“进度怎么样了&#xff1f;”问得头皮发麻&#xff0c;为高昂的知网查重费用而心疼&#xf…

作者头像 李华
网站建设 2026/6/10 7:55:58

毕业/期刊/职称论文必备:9款AI工具一键极速生成超高效

如果你是正在熬夜赶Deadline的毕业生、被导师连环催稿的研究生、或是预算紧张却要拼职称的科研人…… 深夜两点&#xff0c;宿舍只剩键盘敲击声。你盯着屏幕上“延毕预警”邮件&#xff0c;心里一遍遍回放导师那句“内容逻辑不行&#xff0c;参考文献也不规范”。查重一次要花…

作者头像 李华