反射的应用

来源:互联网 发布:mac mini 2012拆机 编辑:程序博客网 时间:2024/04/30 10:12
using System;using System.Collections.Generic;using System.Text;using System.Reflection;using Person;namespace MySchool {/// <summary>/// 注意:因为使用反射进行实例化,当前应用程序并不需要引用类所在的程序集项目/// </summary>class Program {static void Main(string[] args) {//Dll绝对路径(Student)string studentDllPath = @"D:\MySchoolPro\Student\bin\Debug\Student.dll";//姓名名+类名(Student)string studentClassName = "Student.StudentObject";//Dll绝对路径(Teacher)string teacherDllPath = @"D:\MySchoolPro\Teacher\bin\Debug\Teacher.dll";//姓名名+类名(Teacher)string teacherClassName = "Teacher.TeacherObject";//加载程序集的定义信息(Student)Assembly studentAssembly = Assembly.LoadFile(studentDllPath);//加载程序集的定义信息(Teacher)Assembly teacherAssembly = Assembly.LoadFile(teacherDllPath);//在程序集信息中检索指定类的定义信息(Student)Type studentType = studentAssembly.GetType(studentClassName);//根据检索出的类的定义信息利用反射进行实体化在向上转型(Student)PersonObject student = (PersonObject)Activator.CreateInstance(studentType);//赋值student.Name = "张三";student.SayHi();//在程序集信息中检索指定类的定义信息(Teacher)Type teacherType = teacherAssembly.GetType(teacherClassName);//根据检索出的类的定义信息利用反射进行实体化在向上转型(Teacher)PersonObject teacher = (PersonObject)Activator.CreateInstance(teacherType);//赋值teacher.Name = "李四";teacher.SayHi();Console.ReadLine();}}}using System;using System.Collections.Generic;using System.Text;namespace Person {/// <summary>/// 父类/// </summary>public class PersonObject {private string name;public string Name {get { return name; }set { name = value; }}public virtual void SayHi() {}}}using System;using System.Collections.Generic;using System.Text;using Person;namespace Student {/// <summary>/// 子类/// </summary>public class StudentObject : PersonObject {public override void SayHi() {Console.WriteLine("大家好我是学员叫!{0}", this.Name);}}}using System;using System.Collections.Generic;using System.Text;using Person;namespace Teacher {/// <summary>/// 子类/// </summary>public class TeacherObject : PersonObject {public override void SayHi() {Console.WriteLine("大家好我是教员{0}", this.Name);}}}

原创粉丝点击