一个反射的实例

 分成三步

1、using System.Reflection;

2、Type _type=你的对象.GetType();

3、遍历操作你想要的东西

如:ConstructorInfo、EventInfo、FiledInfo、InterfaceInfo、MemberInfo、MethodInfo、PropertyInfo

本实例就用FiledInfo、MemberInfo、MethodInfo、PropertyInfo四个

 

 

添加一个用于测试的类PersonClass

public class PersonClass
    {
        public string aa;
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private string sex;

        public string Sex
        {
            get { return sex; }
            set { sex = value; }
        }

        private int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        private int tel;

        public int Tel
        {
            get { return tel; }
            set { tel = value; }
        }

        public PersonClass()
        {
            
        }

        public PersonClass(string name,string sex,int age,int Tel)
        {
            this.Name = name;
            Sex = sex;
            this.Age = age;
            this.Tel = Tel;
        }

        protected void SetAge(int age)
        {
            this.Age = age;
        }

        public  void PrintName()
        {
            System.Web.HttpContext.Current.Response.Write("xyt");
        }
    }


 

 

default.aspx上放四个TextBox

<div>
    
        <asp:TextBox ID="TextBox1" TextMode= "MultiLine" runat="server"></asp:TextBox>
    
        <br />
        <br />
    
        <asp:TextBox ID="TextBox2" TextMode= "MultiLine" runat="server"></asp:TextBox>
    
        <br />
        <br />
    
        <asp:TextBox ID="TextBox3" TextMode= "MultiLine" runat="server" Height="223px"></asp:TextBox>
    
        <br />
        <br />
    
        <asp:TextBox ID="TextBox4" TextMode= "MultiLine" runat="server" Height="330px" 
            Width="456px"></asp:TextBox>
    
    </div>


 

 

 

default.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Reflection;


namespace MyReflection
{
    public partial class _Default : System.Web.UI.Page
    {
        PersonClass _Person=new PersonClass();
        protected void Page_Load(object sender, EventArgs e)
        {
            GetPropertyInfo();
            GetFilesInfo();
            GetMethodInfo();
            GetMemberInfo();
        }
        public void GetPropertyInfo()
        {
            Type _type=_Person.GetType();

            foreach (PropertyInfo item in _type.GetProperties())
            {
                this.TextBox1.Text += item.Name.ToString() + "\n";
            }
        }

        public void GetFilesInfo()
        {
            Type type = _Person.GetType();
            foreach (FieldInfo item in type.GetFields())
            {
                this.TextBox2.Text += item.Name.ToString() + "\n";
            }
        }

        public void GetMethodInfo()
        {
            Type type = _Person.GetType();
            foreach (MethodInfo item in type.GetMethods())
            {
                this.TextBox3.Text += item.Name.ToString() + "\n";
            }
        }

        public void GetMemberInfo()
        {
            Type type = _Person.GetType();
            foreach (MemberInfo item in type.GetMembers())
            {
                this.TextBox4.Text += item.DeclaringType+" "+item.MemberType+" "+item.Name.ToString() +" "+ "\n";
            }
        }
    }
}


注:public string aa;虽然没有get、set,通过GetProperties获取不到,但可以通过GetFields来获取

  上面的方法有重载的形式:BindingFlags枚举的值,表示应返回那些成员

 

Java反射机制是在运行时动态地获取类的信息,包括类名、方法名、属性等,并且可以在运行时调用对象的方法和访问对象的属性。下面是一个简单的Java反射机制的实例: 假设我们有一个Person类,其中包含以下属性和方法: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void sayHello() { System.out.println("Hello, my name is " + name + ", and I am " + age + " years old."); } } ``` 现在我们可以使用反射机制来获取Person类的信息并创建它的实例: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionExample { public static void main(String[] args) throws Exception { // 获取Person类的Class对象 Class<Person> personClass = Person.class; // 获取Person类的构造函数 Constructor<Person> constructor = personClass.getConstructor(String.class, int.class); // 创建Person类的实例 Person person = constructor.newInstance("John", 30); // 获取Person类的name属性 Field nameField = personClass.getDeclaredField("name"); nameField.setAccessible(true); // 修改Person类的name属性 nameField.set(person, "Tom"); // 调用Person类的sayHello方法 Method sayHelloMethod = personClass.getDeclaredMethod("sayHello"); sayHelloMethod.invoke(person); } } ``` 在这个例子中,我们首先使用`Person.class`获取Person类的Class对象,然后使用`getConstructor`方法获取构造函数,使用`newInstance`方法创建Person类的实例。 接下来,我们使用`getDeclaredField`方法获取Person类的name属性,并使用`setAccessible`方法设置该属性可访问。然后,我们使用`set`方法修改该属性的值。 最后,我们使用`getDeclaredMethod`方法获取Person类的sayHello方法,并使用`invoke`方法调用该方法。 这个例子只是反射机制的一个简单示例,反射机制还可以应用于许多其他方面,例如动态代理、注解处理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值