C#反射之基础应用实例总结
本文将介绍C#中反射的基础应用实例,并通过两个示例来说明反射的具体操作。
什么是反射?
反射是指在运行时检查类型信息并提供操作类型成员的能力。在C#中,使用反射可以动态获取类型信息、创建对象实例、调用方法和访问属性等。
反射的基本应用
获取类型信息
可以使用Type
类的静态方法来获取类型信息。如下代码示例获取了Person
类的类型信息:
Type type = typeof(Person);
创建对象实例
使用反射可以在运行时创建对象实例。如下代码示例创建了Person
类的一个实例:
Type type = typeof(Person);
object person = Activator.CreateInstance(type);
调用方法
使用反射可以在运行时调用方法。如下代码示例调用了Person
类的SayHello
方法:
Type type = typeof(Person);
object person = Activator.CreateInstance(type);
type.GetMethod("SayHello").Invoke(person, null);
访问属性
使用反射可以在运行时访问属性。如下代码示例获取了Person
类的Name
属性的值:
Type type = typeof(Person);
object person = Activator.CreateInstance(type);
object name = type.GetProperty("Name").GetValue(person);
反射的示例应用
示例1:动态加载DLL并调用方法
假设我们有一个Math
类,在该类中有一个Add
方法用于计算两个整数的和。我们希望在运行时动态加载该类的DLL,并调用Add
方法计算两个数的和。
- 创建
Math
类的DLL,并命名为MathLib.dll
。 - 创建一个控制台应用程序,引用
MathLib.dll
。 - 使用
Assembly
类动态加载MathLib.dll
,并获取Math
类型信息。 - 使用反射获取
Add
方法,并通过反射调用该方法。
示例代码如下:
using System;
using System.Reflection;
namespace ReflectionDemo
{
class Program
{
static void Main(string[] args)
{
// 动态加载MathLib.dll
Assembly assembly = Assembly.LoadFrom("MathLib.dll");
Type mathType = assembly.GetType("Math");
// 调用Add方法
object math = Activator.CreateInstance(mathType);
MethodInfo addMethod = mathType.GetMethod("Add");
object[] parameters = new object[] { 1, 2 };
int sum = (int)addMethod.Invoke(math, parameters);
Console.WriteLine($"{parameters[0]} + {parameters[1]} = {sum}");
}
}
}
示例2:自定义ORM框架
假设我们要开发一个ORM框架,用于操作数据库。我们可以定义一个Table
特性来标识实体类对应的数据库表名,在运行时根据Table
特性生成相应的SQL语句。
- 创建一个
Table
特性用于标识实体类对应的表名。 - 创建一个
ORM
类,使用反射获取实体类的Type
信息,并根据Table
特性生成相应的SQL语句。
示例代码如下:
using System;
using System.Reflection;
namespace ORMFramework
{
[AttributeUsage(AttributeTargets.Class)]
public class TableAttribute : Attribute
{
public string Name { get; set; }
public TableAttribute(string tableName)
{
Name = tableName;
}
}
public class ORM
{
public static string GetSelectAllSQL<T>()
{
Type type = typeof(T);
TableAttribute tableAttribute = (TableAttribute)type.GetCustomAttribute(typeof(TableAttribute));
string tableName = tableAttribute.Name;
return $"SELECT * FROM {tableName}";
}
}
[Table("Person")]
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
string sql = ORM.GetSelectAllSQL<Person>();
Console.WriteLine($"SQL: {sql}");
}
}
}
以上就是C#反射之基础应用实例的总结及示例代码。通过学习反射,我们可以实现更加灵活的程序设计。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#反射之基础应用实例总结 - Python技术站