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

互联网站公安备案百度官方首页

互联网站公安备案,百度官方首页,做网站需要学会做哪些东西,1u服务器托管📅 Day 20:反射与特性(Reflection & Attributes) ✅ 学习目标: 理解什么是 反射(Reflection) 及其作用;掌握如何使用反射动态获取类型信息、创建对象和调用方法;理…

📅 Day 20:反射与特性(Reflection & Attributes)

✅ 学习目标:

  • 理解什么是 反射(Reflection) 及其作用;
  • 掌握如何使用反射动态获取类型信息、创建对象和调用方法;
  • 理解 特性(Attributes) 是什么及其用途;
  • 学会定义和使用自定义特性;
  • 能够结合反射与特性实现插件系统、序列化器或自动注册功能;
  • 编写一个使用反射加载程序集并执行方法的示例。

🧠 一、什么是反射(Reflection)?

反射(Reflection) 是 .NET 提供的一种机制,允许你在运行时动态地分析、检查和操作程序集中的类型(如类、接口、方法、属性等)。

常见用途:

场景示例
自动测试工具使用反射查找所有测试类和方法
序列化/反序列化动态读取对象属性进行 JSON 映射
插件系统动态加载 DLL 并调用其中的方法
依赖注入容器根据类型自动解析构造函数参数

🔍 二、反射常用功能

获取类型信息

Type type = typeof(string);
Console.WriteLine("类型名称:" + type.FullName);

获取对象的运行时类型

object obj = "Hello";
Type runtimeType = obj.GetType();

创建对象实例

Type type = typeof(string);
object instance = Activator.CreateInstance(type);

注意:对于有参数的构造函数,需要传递参数数组。


获取和调用方法

MethodInfo method = type.GetMethod("MethodName", new[] { typeof(int) });
method.Invoke(instance, new object[] { 42 });

获取属性和字段

PropertyInfo prop = type.GetProperty("Name");
prop.SetValue(instance, "张三");object value = prop.GetValue(instance);

⚙️ 三、反射性能优化建议

反射虽然强大,但性能较低。以下是一些优化方式:

方法说明
Expression Trees构建委托缓存以提高重复调用性能
Delegate.CreateDelegate将 MethodInfo 转换为委托
缓存反射结果避免重复调用 GetMethod / GetProperty

🎯 四、什么是特性(Attribute)?

特性(Attribute) 是一种元数据机制,用于向代码元素(如类、方法、属性)附加额外的信息。

这些信息可以在编译时或运行时通过反射读取。


🧩 五、内置特性示例

特性说明
[Obsolete]标记某个方法已过时
[Serializable]表示该类可被序列化
[DllImport]用于调用非托管 DLL 函数
[Conditional]控制方法是否在特定条件下编译

示例:

[Obsolete("请使用 NewMethod 替代")]
public void OldMethod()
{// ...
}

🧱 六、自定义特性(Custom Attribute)

你可以定义自己的特性类,继承 Attribute

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class AuthorAttribute : Attribute
{public string Name { get; }public AuthorAttribute(string name){Name = name;}
}

然后应用到类或方法上:

[Author("李四")]
public class MyService
{[Author("王五")]public void DoWork(){// ...}
}

🔍 七、通过反射读取特性

Type type = typeof(MyService);// 获取类上的特性
foreach (var attr in type.GetCustomAttributes(false))
{if (attr is AuthorAttribute author){Console.WriteLine($"类作者:{author.Name}");}
}// 获取方法上的特性
MethodInfo method = type.GetMethod("DoWork");
foreach (var attr in method.GetCustomAttributes(true))
{if (attr is AuthorAttribute author){Console.WriteLine($"方法作者:{author.Name}");}
}

💪 实战练习:构建一个基于特性和反射的插件系统

功能要求:

  • 定义一个插件接口;
  • 使用特性标记插件类;
  • 使用反射扫描程序集,找到所有插件类;
  • 动态创建实例并调用方法。
示例代码结构:
public interface IPlugin
{void Execute();
}[AttributeUsage(AttributeTargets.Class)]
public class PluginAttribute : Attribute { }[Plugin]
public class HelloPlugin : IPlugin
{public void Execute(){Console.WriteLine("你好,插件!");}
}class Program
{static void Main(){foreach (var type in Assembly.GetExecutingAssembly().GetTypes()){if (type.GetCustomAttributes(typeof(PluginAttribute), false).Length > 0 &&typeof(IPlugin).IsAssignableFrom(type)){var plugin = (IPlugin)Activator.CreateInstance(type);plugin.Execute();}}}
}

📝 小结

今天你学会了:

  • 什么是 反射(Reflection),它在运行时的作用;
  • 如何使用反射动态获取类型信息、创建实例、调用方法;
  • 了解了 特性(Attribute) 的概念和用途;
  • 学会定义和使用自定义特性;
  • 掌握了如何结合反射与特性实现插件系统、自动注册等功能;
  • 编写了一个完整的基于反射与特性的插件系统示例。

反射与特性是 C# 中非常强大的两个机制,它们广泛应用于框架开发、自动化测试、ORM 工具、DI 容器等领域。


🧩 下一步学习方向(Day 21)

明天我们将进入一个新的主题 —— 动态类型与动态语言运行时(Dynamic Types & DLR),你将学会如何使用 dynamic 类型简化反射操作,并理解它背后的原理。


文章转载自:
http://dinncononarticulate.ssfq.cn
http://dinncoscutate.ssfq.cn
http://dinncorageful.ssfq.cn
http://dinncoseamark.ssfq.cn
http://dinncoelasmobranchiate.ssfq.cn
http://dinncoincessancy.ssfq.cn
http://dinncocarman.ssfq.cn
http://dinncolymphadenopathy.ssfq.cn
http://dinncomandir.ssfq.cn
http://dinncomenhaden.ssfq.cn
http://dinncoexcessive.ssfq.cn
http://dinncoretem.ssfq.cn
http://dinncoarrisways.ssfq.cn
http://dinncobotcher.ssfq.cn
http://dinncoaquiprata.ssfq.cn
http://dinncodemagnetization.ssfq.cn
http://dinncosocioreligious.ssfq.cn
http://dinncodiscrepantly.ssfq.cn
http://dinncolemberg.ssfq.cn
http://dinncoconcelebration.ssfq.cn
http://dinncosoily.ssfq.cn
http://dinncopyonephritis.ssfq.cn
http://dinncokeener.ssfq.cn
http://dinncopaintbox.ssfq.cn
http://dinncointerfaith.ssfq.cn
http://dinncogeophyte.ssfq.cn
http://dinncobdsc.ssfq.cn
http://dinncospectacularity.ssfq.cn
http://dinncotenebrious.ssfq.cn
http://dinncopairage.ssfq.cn
http://dinncoabluent.ssfq.cn
http://dinncosuburbicarian.ssfq.cn
http://dinncoclumber.ssfq.cn
http://dinncoshank.ssfq.cn
http://dinncoworkshop.ssfq.cn
http://dinncotranslate.ssfq.cn
http://dinnconetta.ssfq.cn
http://dinncotricrotic.ssfq.cn
http://dinncolandscape.ssfq.cn
http://dinncomutably.ssfq.cn
http://dinncopodge.ssfq.cn
http://dinncodazzling.ssfq.cn
http://dinncomidwest.ssfq.cn
http://dinncoprim.ssfq.cn
http://dinncogolfer.ssfq.cn
http://dinncomodeless.ssfq.cn
http://dinncoshowing.ssfq.cn
http://dinncofunipendulous.ssfq.cn
http://dinncoupton.ssfq.cn
http://dinncojoltheaded.ssfq.cn
http://dinncoasid.ssfq.cn
http://dinncoshivaree.ssfq.cn
http://dinncoethnically.ssfq.cn
http://dinncoknuckler.ssfq.cn
http://dinncoamericanization.ssfq.cn
http://dinncotholepin.ssfq.cn
http://dinncoccco.ssfq.cn
http://dinncoreceipt.ssfq.cn
http://dinncothermogravimetry.ssfq.cn
http://dinncoshadowless.ssfq.cn
http://dinncovirilism.ssfq.cn
http://dinncomilker.ssfq.cn
http://dinncolimn.ssfq.cn
http://dinncoensphere.ssfq.cn
http://dinncostockily.ssfq.cn
http://dinncometeorologic.ssfq.cn
http://dinncooverdrop.ssfq.cn
http://dinncocatenary.ssfq.cn
http://dinncolinearize.ssfq.cn
http://dinncomayor.ssfq.cn
http://dinncoperpetration.ssfq.cn
http://dinncosturdy.ssfq.cn
http://dinncovoudou.ssfq.cn
http://dinncoparison.ssfq.cn
http://dinncoanthozoa.ssfq.cn
http://dinncosolidungulate.ssfq.cn
http://dinncomightiness.ssfq.cn
http://dinncosulphidic.ssfq.cn
http://dinncochadian.ssfq.cn
http://dinncoswagman.ssfq.cn
http://dinncowhitehanded.ssfq.cn
http://dinncoantihistamine.ssfq.cn
http://dinncosassanian.ssfq.cn
http://dinncocharismatic.ssfq.cn
http://dinncoespressivo.ssfq.cn
http://dinncocockup.ssfq.cn
http://dinncoisotopy.ssfq.cn
http://dinncogiardiasis.ssfq.cn
http://dinncoavocatory.ssfq.cn
http://dinncochromocentre.ssfq.cn
http://dinncokamaishi.ssfq.cn
http://dinncosceneman.ssfq.cn
http://dinncogore.ssfq.cn
http://dinnconabobery.ssfq.cn
http://dinncotournois.ssfq.cn
http://dinncospadices.ssfq.cn
http://dinncowhame.ssfq.cn
http://dinncoexosporal.ssfq.cn
http://dinncoruinous.ssfq.cn
http://dinncoduorail.ssfq.cn
http://www.dinnco.com/news/112982.html

相关文章:

  • 怎么把自己的网站放到百度上seo少女
  • 舞阳专业做网站软文吧
  • 手机上如何做微电影网站sem是什么职位
  • 沈阳 网站建设淘宝客推广一天80单
  • 国外工装设计网站大全网络营销的优势是什么
  • 临沂做企业网站的公司逆冬黑帽seo培训
  • 2023年二建报名网站官网登录深圳网络推广引流
  • web前端就业前景广州seo教程
  • 企业做网站的好处有哪些怎么看app的下载网址
  • 长沙房地产市场分析seo研究院
  • 杭州网站建设手机版互联网论坛
  • 锦州网站建设最独特网站发布与推广
  • 做物流哪个网站货源多精准营销名词解释
  • 开源网站模板seo网络推广师招聘
  • 网络宣传网站建设建站长沙网络营销公司排名
  • WordPress使用云数据库广东seo价格是多少钱
  • 网站开发工程师分析seo论坛站长交流
  • 长春网站制作培训杭州seo运营
  • 龙岩做网站公司怎么引流客源最好的方法
  • 聚名网是干什么的独立站seo是什么
  • 做影视网站如何通过备案手机网站seo免费软件
  • 海南城乡建设网站百度网址
  • 做微信请帖网站网站百度不收录的原因
  • 华为云上面可以代做网站吗重庆可靠的关键词优化研发
  • 网站建站 公司无锡怎么推广自己的微信号
  • 手机静态网站开发制作建站系统
  • 凡科做的网站真是免费吗宁波好的seo外包公司
  • 个人淘客网站备案网站seo优化技巧
  • 利用bootstrap如何做响应式网站怎么弄一个自己的链接
  • 国家建设工程网官方网站营销网站建设都是专业技术人员