1. 获取类型信息:
using System;
class Program
{
static void Main()
{
Type type = typeof(string); // 获取类型信息
Console.WriteLine("Type: " + type.FullName);
// 获取类型的成员信息
foreach (var memberInfo in type.GetMembers())
{
Console.WriteLine("Member: " + memberInfo.Name);
}
}
}
2. 创建对象:
using System;
using System.Reflection;
class Program
{
static void Main()
{
Type type = typeof(MyClass);
// 创建对象实例
object instance = Activator.CreateInstance(type);
// 调用方法
MethodInfo method = type.GetMethod("MyMethod");
method.Invoke(instance, null);
}
}
class MyClass
{
public void MyMethod()
{
Console.WriteLine("Method called.");
}
}
3. 获取和设置属性值:
using System;
using System.Reflection;
class Program
{
static void Main()
{
Type type = typeof(MyClass);
// 创建对象实例
object instance = Activator.CreateInstance(type);
// 获取属性值
PropertyInfo property = type.GetProperty("MyProperty");
object value = property.GetValue(instance);
// 设置属性值
property.SetValue(instance, "NewValue");
}
}
class MyClass
{
public string MyProperty { get; set; }
}
4. 获取和调用构造函数:
using System;
using System.Reflection;
class Program
{
static void Main()
{
Type type = typeof(MyClass);
// 获取默认构造函数
ConstructorInfo constructor = type.GetConstructor(Type.EmptyTypes);
// 创建对象实例
object instance = constructor.Invoke(null);
}
}
class MyClass
{
public MyClass()
{
Console.WriteLine("Constructor called.");
}
}
5. 判断类型关系:
using System;
class Program
{
static void Main()
{
Type type = typeof(string);
// 判断类型关系
bool isString = type == typeof(string);
Console.WriteLine("Is string type: " + isString);
}
}
这些例子演示了如何使用反射获取类型信息、创建对象、调用方法、访问和修改属性,以及判断类型关系。反射是一种高级特性,通常在需要动态处理类型信息的场景下使用,例如配置文件解析、插件系统、ORM(对象关系映射)等。在使用反射时需要注意性能开销和类型安全性。
转载请注明出处:http://www.pingtaimeng.com/article/detail/6362/C#