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

新华书店的做的数字阅读网站wordpress编辑器格式

新华书店的做的数字阅读网站,wordpress编辑器格式,建网站教学视频,外包网站建设是什么意思序号系列文章11【C#基础】C# 预处理器指令12【C#基础】C# 文件与IO13【C#进阶】C# 特性文章目录前言1#xff0c;反射的概念2#xff0c;使用反射访问特性3#xff0c;反射的用途4#xff0c;反射的优缺点比较4.1 优点#xff1a;4.2 缺点#xff1a;5#xff0c;System…序号系列文章11【C#基础】C# 预处理器指令12【C#基础】C# 文件与IO13【C#进阶】C# 特性文章目录前言1反射的概念2使用反射访问特性3反射的用途4反射的优缺点比较4.1 优点4.2 缺点5System.Reflection 命名空间5.1 获取程序集中的信息5.2 获取程序集中的类型5.3 获取程序集中的成员5.4 创建类型的实例对象结语前言 ✋ 大家好我是writer桑本章为大家介绍 C# 中的反射。 1反射的概念 反射指的是程序可以访问检测和修改它本身状态或行为的一种行为。 其中访问的目标包括程序集1、模块和类型对象等。可以使用反射动态地创建类型的实例将类型绑定到现有对象或从现有对象中获取类型然后调用其方法或访问器字段和属性。反射行为也常常用来访问应用在程序上的特性。 代码示例简单展示 using System; using System.Reflection;public class Example {static void Main(){// 使用反射获取程序集的信息:Assembly info typeof(int).Assembly;Console.WriteLine(info);} }运行结果 在上例中使用 typeof 方法获取已加载的 int 程序集的完整名称。 2使用反射访问特性 在前面的一章中我们讨论到了 C# 使用反射访问特性的操作。在本章中就可以使用反射的操作来访问 Example 类中的元数据。 代码示例 using System;[System.AttributeUsage(System.AttributeTargets.Class |System.AttributeTargets.Struct) ] public class AuthorAttribute : System.Attribute {public string name; public double age;// 构造函数public AuthorAttribute(string name){this.name name;age 11;} }[Author(writer桑, age 21)] public class Example {// Example类成员 }public class Program {static void Main(){// 访问 Example 类应用的特性 Type type typeof(Example);// 遍历输出 foreach(Object attributes in type.GetCustomAttributes(true)){AuthorAttribute author (AuthorAttribute)attributes;Console.WriteLine(author.age);Console.WriteLine(author.name); }} }运行结果 3反射的用途 反射的用途可以总结为以下几点 需要访问程序中的元数据的特性时。点击了解更多检查和实例化程序集中的类型时。在运行时构建新的类型比如使用 System.Reflection.Emit 中的类。点击了解更多执行后期绑定访问在运行时创建的类型上的方法时。点击了解更多 4反射的优缺点比较 反射的优缺点比较 4.1 优点 反射是运行期的操作提高了程序的灵活性和扩展性。降低耦合度2提高自适应能力。允许动态的创建和使用对象无需提前硬编码3目标对象。 4.2 缺点 性能较低反射是运行期4的代码在性能方面不如直接的编译型5代码。可读性较低使用反射会使得程序本身的逻辑变得复杂在可读性方面不如直接的代码来的简洁。维护成本变高反射是一种绕过了源代码的技术 因而在维护的方面难度较高。 5System.Reflection 命名空间 System.Reflection 命名空间中包含通过检测托管代码中程序集、模块、成员、参数和其他实体的元数据来检索其相关信息的类型。同时也可以用于操作加载类型的实例例如钩子函数6或调用方法。在 C# 中实现反射操作常常需要用到 System.Reflection 命名空间中的类和方法。 列举一些 System.Reflection 命名空间中常用的反射操作 5.1 获取程序集中的信息 System.Reflection 命名空间中的 Assembly.FullName 等属性可以用来获取程序集中的信息。 代码示例 using System; using System.Reflection;public class Example {private int factor;public Example(int f){factor f;}public int SampleMethod(int x){Console.WriteLine($实例方法的执行:({x}));return x * factor;}public static void Main(){Assembly assem typeof(Example).Assembly;Console.WriteLine($程序集的全程:{assem.FullName});// 可以使用 AssemblyName 类型解析完整名称。AssemblyName assemName assem.GetName();Console.WriteLine($名称: {assemName.Name});//从程序集创建一个对象并传入正确的数字//构造函数的参数类型。Object o assem.CreateInstance(Example, false, BindingFlags.ExactBinding, null, new Object[] { 2 }, null, null);// 对对象的实例方法进行晚绑定调用。MethodInfo m assem.GetType(Example).GetMethod(SampleMethod);Object ret m.Invoke(o, new Object[] { 42 });Console.WriteLine($示例方法的返回值为:{ret});Console.WriteLine($程序集入口点:{assem.EntryPoint});} }运行结果 5.2 获取程序集中的类型 System.Reflection 命名空间中的 Assembly.GetExportedTypes 方法可以用来获取程序集中定义的公共类型这些公共类型在程序集外可见。 代码示例 using System; using System.Reflection;public class PublicClass {public class PublicNestedClass { }protected class ProtectedNestedClass { }internal class FriendNestedClass { }private class PrivateNestedClass { } }public class Example {public static void Main(){// 获取程序集中定义的公共类型 foreach (Type t in typeof(Example).Assembly.GetExportedTypes()){Console.WriteLine(t);}} }运行结果 5.3 获取程序集中的成员 System.Reflection 命名空间中的 MemberInfo 类中的属性和方法可以用来获取有关成员属性的信息并提供对成员元数据的访问权限。 代码示例 using System; using System.Reflection;public class Example {// 显示应用到指定成员的自定义属性 public static void DisplayAttributes(Int32 indent, MemberInfo mi){// 获取自定义属性集;如果不存在则返回。object[] attrs mi.GetCustomAttributes(false);if (attrs.Length 0) { return; }// 显示应用于该成员的自定义属性。Display(indent 1, 属性:);foreach (object o in attrs){Display(indent 2, {0}, o.ToString());}}// 显示一个缩进的格式化字符串。 public static void Display(Int32 indent, string format, params object[] param){Console.Write(new string( , indent * 2));Console.WriteLine(format, param);}public static void Main(){//该变量保存缩进的数量, 显示每一行信息时使用。Int32 indent 0;// 显示加载到这个 AppDomain 第一个 程序集的信息。Assembly b AppDomain.CurrentDomain.GetAssemblies()[0];Display(indent, 程序集: {0}, b);// 显示从此程序集导出的 第一个 类型的相关信息。 indent 1;Type t b.GetExportedTypes()[0];Display(0, );Display(indent, 类型: {0}, t);// 遍历显示成员及其自定义属性。indent 1;foreach (MemberInfo mi in t.GetMembers()) // GetMembers 方法{Display(indent, 成员: {0}, mi.Name);DisplayAttributes(indent, mi);// 如果成员是一个方法显示它的参数信息。if (mi.MemberType MemberTypes.Method){foreach (ParameterInfo pi in ((MethodInfo)mi).GetParameters()){Display(indent 1, 参数: 类型{0}, 名字{1}, pi.ParameterType, pi.Name);}}// 如果成员是一个属性显示关于属性的访问方法的信息。 if (mi.MemberType MemberTypes.Property){foreach (MethodInfo am in ((PropertyInfo)mi).GetAccessors()){Display(indent 1, 访问器方法: {0}, am);}}}} }运行结果 5.4 创建类型的实例对象 System.Reflection 空间中的 Assembly.CreateInstance 方法可以用来获取包含当前执行的代码的程序集以此来创建类型的实例对象。 代码示例 using System; using System.Reflection;public class Person {private string _name;public Person(){ }public Person(string name){this._name name;}public string Name{get { return this._name; }set { this._name value; }}public override string ToString(){return this._name;} }public class Example {public static void Main(){Assembly assem typeof(Person).Assembly;// 创建 Person 类的实例化对象 Person p (Person)assem.CreateInstance(Person);if (!(p null)){p.Name John;Console.WriteLine($实例化值为{p}的{p.GetType().Name}对象);}else{Console.WriteLine(无法实例化Person对象。);}} }运行结果 点击了解更多 System.Reflection 命名空间的使用。 结语 以上就是关于 C# 反射的介绍啦希望对大家有所帮助。感谢大家的支持。 程序集assembly是一个及一个以上托管模块以及一些资源文件的逻辑组合。在 .NET 中dll与exe文件都是程序集。 ↩︎ 耦合性或称耦合力或耦合度是一种软件度量是指一程序中模块及模块之间信息或参数依赖的程度。 ↩︎ 硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践与从外部获取数据或在运行时生成数据不同。 ↩︎ 运行期是把编译后的文件交给计算机执行,直到程序运行结束。 ↩︎ 编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。 ↩︎ 钩子函数是 Windows 消息处理机制的一部分是指在程序正常运行中接受信息之前预先启动的函数用来检查和修改传给该程序的信息钩子实际上是一个处理消息的程序段通过系统调用把它挂入系统。 ↩︎
http://www.w-s-a.com/news/47040/

相关文章:

  • jq做6个网站做什么好广西临桂建设局网站
  • 网站新闻图片尺寸南京网站设计公司
  • 重庆seo建站网站服务器 安全
  • 咸宁做网站的公司桂林网站建设兼职
  • 教做网站网站开发行业分析
  • 忻州网站建设培训友情链接交换形式有哪些
  • 佛山做外贸网站渠道外贸常用网站
  • 文章收录网站网站及新媒体建设办法
  • 招聘网站排行榜2021找建网站公司
  • 网站建设制作宝塔面板活动宣传推广的形式有哪些
  • 掉关键词网站敏捷软件开发流程
  • 微信小程序格泰网站建设新闻采编与制作专业简历
  • 电子商城建设网站海伦网站建设
  • 南充能够建设网站的公司有专门做设计的一个网站
  • 免费域名申请个人网站阿里巴巴运营的工作内容
  • 怎么建自己的手机网站保定电子商务网站建设
  • 系部网站建设中期检查表创建网站的公司
  • 西宁网站建设优化重庆企业的网站建设
  • 贝壳企业网站管理系统徽与章网站建设宗旨
  • 郑州网站模板动漫设计与制作设计课程
  • 在线制作网站的工具岳阳网站设计改版
  • 网站建设需要汇报哪些内容前端开发的工作内容
  • 无锡阿凡达网站建设美团app开发公司
  • 个性化企业网站制作公司深圳高端网站定制公
  • 专业深圳网站定制开发企业网站开发 流程
  • 网站建设推广的软文php网站平台
  • 如何做代刷网站长外贸网站个性设计
  • 合同网站开发 设计 后期维护如何搭建海外网络
  • 提供网站建设服务优化大师哪个好
  • 军队营房基础建设网站哦咪咖网站建设