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

成都平台网站开发公司网站点击量统计

成都平台网站开发公司,网站点击量统计,个人网站设计构思,东莞交警app什么是反射? 定义:反射是一种机制,允许程序在运行时获取关于自身的信息,并且可以动态调用方法、访问属性或创建实例。用途:常用于框架设计、工具开发、序列化、代码分析和测试等场景 反射的核心概念 1. 获取类型信息…

什么是反射?


  • 定义:反射是一种机制,允许程序在运行时获取关于自身的信息,并且可以动态调用方法、访问属性或创建实例。
  • 用途:常用于框架设计、工具开发、序列化、代码分析和测试等场景

反射的核心概念 


1. 获取类型信息

通过System.Type类,可以获取类型的完整信息。

using System;public class Example
{public void Display(){Console.WriteLine("Display method called");}
}class Program
{static void Main(){Type type = typeof(Example);Console.WriteLine("Methods in Example:");foreach (var method in type.GetMethods()){Console.WriteLine(method.Name);}}
}

2. 动态创建对象

使用Activator.CreateInstance方法在运行时创建对象实例。

Type type = typeof(Example);
object instance = Activator.CreateInstance(type);MethodInfo displayMethod = type.GetMethod("Display");
displayMethod.Invoke(instance, null);

3. 动态调用方法

可以使用MethodInfo来调用对象的方法。

Type type = typeof(Example);
MethodInfo methodInfo = type.GetMethod("Display");if (methodInfo != null)
{object instance = Activator.CreateInstance(type);methodInfo.Invoke(instance, null);
}

4. 访问字段和属性

通过FieldInfoPropertyInfo访问对象的字段和属性。

public class Person
{public string Name { get; set; }private int age;public Person(string name, int age){Name = name;this.age = age;}
}class Program
{static void Main(){Type personType = typeof(Person);var personInstance = Activator.CreateInstance(personType, "Alice", 30);PropertyInfo nameProp = personType.GetProperty("Name");FieldInfo ageField = personType.GetField("age", BindingFlags.NonPublic | BindingFlags.Instance);Console.WriteLine($"Name: {nameProp.GetValue(personInstance)}");Console.WriteLine($"Age: {ageField.GetValue(personInstance)}");}
}

高级主题


1.反射与特性

反射可用于读取属性(Attribute)信息。

[Obsolete("This class is obsolete.")]
public class OldClass
{public void Method() { }
}class Program
{static void Main(){Type type = typeof(OldClass);object[] attributes = type.GetCustomAttributes(false);foreach (var attr in attributes){Console.WriteLine(attr);}}
}

2.动态程序集加载(常用)

通过反射可以动态加载程序集并使用其中的类型。

Assembly assembly = Assembly.LoadFrom("SomeLibrary.dll");
Type someType = assembly.GetType("SomeLibrary.SomeClass");object instance = Activator.CreateInstance(someType);

使用场景


插件系统:

  • 可以动态加载和执行外部模块或插件。

框架设计:

  • ORM框架中,通过反射映射数据库表和类。

工具开发:

  • 提供对象浏览器、自动文档生成等功能。

测试与调试:

  • 在单元测试框架中,反射用于发现和调用测试方法。

实践习题 


编写一个程序,利用反射获取某个类的所有方法名称和参数信息,并打印出来。

using System;
using System.Reflection;public class SampleClass
{public void Method1() { }public int Method2(int x) { return x; }private string Method3(string input, double value) { return input + value; }
}class Program
{static void Main(){Type type = typeof(SampleClass);Console.WriteLine($"Methods in {type.Name}:");foreach (MethodInfo method in type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)){Console.Write($"Method: {method.Name}, Return Type: {method.ReturnType.Name}, Parameters: ");ParameterInfo[] parameters = method.GetParameters();foreach (var param in parameters){Console.Write($"{param.ParameterType.Name} {param.Name} ");}Console.WriteLine();}}
}

说明:

  • 使用BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance标志以获取类中的所有公共和私有实例方法。
  • ParameterInfo用于获取每个参数的信息。

 这些示例展示了如何使用反射来动态检查和操作对象,提高代码的灵活性和动态性。如果有其他问题或需要进一步探讨,请随时告诉我!

http://www.dtcms.com/wzjs/238736.html

相关文章:

  • 在广州注册一个公司要多少钱关键词首页排名优化价格
  • 中原区建设局网站seo排名怎么优化软件
  • php网站开发实例代码中国科技新闻网
  • wordpress get post url山西优化公司
  • 石家庄做商城网站的公司新闻最近的大事10件
  • wordpress api 自定义认证郑州粒米seo外包
  • 1元购类似网站架设药多少钱西安网站外包
  • 网站建设准备资料什么是域名
  • 做网站出路seo群发软件
  • 家教中介网站怎么做学员引流成都网站建设方案服务
  • 怎样经营好一个网站惠州seo外包费用
  • 网站制作公司茂名seo教程搜索引擎优化
  • 下做图软件在哪个网站下载怎么免费建立网站
  • 网站打开空白 重启iis就好了海淀区seo引擎优化
  • 响应式网站建设服务商新的数据新闻
  • 自建网站代理服务器下载百度到桌面上
  • 文化传媒公司网站建设济南市新闻最新消息
  • 九一果冻制品厂最新电视重庆百度推广优化
  • c2c网站特点南宁一站网网络技术有限公司
  • 成都建设网站建设淄博网络推广公司哪家好
  • 邯郸去哪做网站改版搜索广告是什么意思
  • 启博微分销官网成都官网seo服务
  • 网站建设出售北京做seo的公司
  • 平度网站建设网络推广深圳有效渠道
  • 建网站用htmlseo优化包括哪些内容
  • 淘宝客自建网站百度官方网首页
  • 自建网站怎么关闭网络营销八大职能
  • 在线seo工具乐天seo视频教程
  • 如何将自己做的网站放到网上去球队世界排名榜
  • 张槎建网站服务友情链接有哪些作用