c#反射的学习
2009-02-06 21:27
323 查看
using System; using System.Collections.Generic; using System.Text; using System.Reflection; //反射:动态的读取类中的成员,动态的执行方法 namespace RelectionTest { //性别枚举 enum Gender { 男,女 } //学生类 class Student { public string studentName;//学生姓名 public Gender studentsGender;//学生性别 //构造方法 public Student(string sName,Gender sGender) { studentName = sName; studentsGender = sGender; } } //课程类 class Course { public string courseName;//课程名称 public string courseTeacherName;//课程教师 //构造方法 public Course(string sCName,string sCTName) { courseName = sCName; courseTeacherName = sCTName; } } //成绩类 class Score { public Student student;//学生 public Course course;//课程 public int mark;//成绩 //构造方法 public Score(Student stu, Course cur, int imark) { student = stu; course = cur; mark = imark; } } //初始化学生,课程,成绩信息 class Data { //成绩数据以字段呈现 public Score score1; public Score score2; public Score score3; public Score score4; //学生数据以属性呈现 private Student stu1; private Student stu2; //课程数据以方法返回 private Course cou1; private Course cou2; //属性封装了字段 public Student Stu1 { get{return stu1;} } public Student Stu2 { get { return stu2;} } //构造方法 用于初始化数据 public Data() { stu1 = new Student("小树",Gender.女); stu2 = new Student ("大名", Gender.男); cou1 = new Course("课程a","老猪"); cou2 = new Course("课程b","老万"); score1 = new Score(stu1, cou1, 99); score2 = new Score(stu1, cou2, 77); score3 = new Score(stu2, cou1, 88); score4 = new Score(stu2, cou2, 66); } //公有方法,返回课程数据 public Course GetCourse1() { return cou1; } public Course GetCourse2() { return cou2; } } class ReflectionHelper { private Data data = new Data(); //使用反射遍历对象的成员(字段,属性,方法等) public void ListMember() { Console.WriteLine("-------------------遍历对象的成员---------------------"); Console.WriteLine("成员名/t/t成员类型/t/t声明成员的类"); //成员遍历 MemberInfo[] arr = data .GetType ().GetMembers (); foreach (MemberInfo mi in arr) { Console.WriteLine(string.Format ("{0}/t{1}/t{2}",mi.Name.PadRight (10,' '),mi.MemberType .ToString ().PadRight(10,' '),mi.DeclaringType .ToString ().PadRight(10,' '))); } } //使用反射遍历对象的字段 public void ListScore() { Console.WriteLine("----------------------------成绩数据-------------------------"); Console.WriteLine("姓名/t性别/t课程名/t授课教师/t成绩"); //字段 FieldInfo[] arrSorce = data.GetType().GetFields(); foreach (FieldInfo fi in arrSorce) { //读取字段的值 Score score = (Score)fi.GetValue(data); Console.WriteLine(string.Format("{0}/t{1}/t{2}/t{3}/t{4}", score.student.studentName, score.student.studentsGender, score.course.courseName, score.course.courseTeacherName, score.mark)); } } //使用反射遍历对象的属性 public void ListStudent() { Console.WriteLine("------学生表-------"); Console.WriteLine("姓名/t性别"); // 属性 PropertyInfo[] arrstu = data.GetType().GetProperties(); foreach (PropertyInfo pi in arrstu) { //读取属性的值 Student stu = (Student)pi.GetValue(data,null); Console.WriteLine(string.Format ("{0}/t{1}",stu.studentName,stu.studentsGender)); } } //反射对象的方法 public void ListCourse() { Console.WriteLine("----------课程数据------------"); Console.WriteLine("课程名/t授课老师"); //方法 MethodInfo[] arrCourse = data.GetType().GetMethods(); foreach (MethodInfo mi in arrCourse) { //判断是否时获取课程的方法 if (mi.Name.IndexOf("GetCourse") > -1) { //执行方法 Course course = mi.Invoke(data, null) as Course; Console.WriteLine(string.Format("{0}/t{1}", course.courseName, course.courseTeacherName)); } } } } class Program { static void Main(string[] args) { ReflectionHelper rh = new ReflectionHelper(); rh.ListMember(); rh.ListScore(); rh.ListStudent(); rh.ListCourse(); Console.ReadKey(); } } }
//
相关文章推荐
- 【C#学习】Reflection 反射
- C#反射的学习(二)--访问字段、属性、方法
- C#反射Reflection学习随笔
- C#语言学习之旅(10)--特性与反射
- C# Reflection反射学习
- C#基础学习系列之:反射
- [C#]C#学习笔记-类型反射,晚期绑定,进程,对象上下文
- C#2.0学习8--反射与程序集
- C#学习笔记 反射
- C#语言学习之旅(10)--特性与反射
- c#反射机制学习和利用反射获取类型信息
- C#反射的学习(一)--获得成员信息
- C#反射学习
- C#反射机制学习总结
- C# 反射学习总结
- C# 反射机制的学习心得
- c#反射机制学习和利用反射获取类型信息
- C#反射Reflection学习随笔(完结篇)_AX
- C#反射技术学习
- c#学习6——C#中的反射