反射的应用

本文展示了如何使用C#中的反射API加载DLL文件,并通过反射实例化不同类,如学生和教师类,进行属性赋值和方法调用。此示例突出了反射在动态类型系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值