获取类型信息:
using System;
class Program
{
static void Main()
{
// 获取类型信息
Type type = typeof(MyClass);
// 输出类型的名称
Console.WriteLine("Type Name: " + type.FullName);
// 获取类型的成员信息
foreach (var memberInfo in type.GetMembers())
{
Console.WriteLine("Member: " + memberInfo.Name);
}
}
}
class MyClass
{
public int MyProperty { get; set; }
public void MyMethod() { }
}
创建对象:
using System;
using System.Reflection;
class Program
{
static void Main()
{
// 获取类型信息
Type type = typeof(MyClass);
// 创建对象
object instance = Activator.CreateInstance(type);
// 设置属性值
PropertyInfo propertyInfo = type.GetProperty("MyProperty");
propertyInfo.SetValue(instance, 42);
// 调用方法
MethodInfo methodInfo = type.GetMethod("MyMethod");
methodInfo.Invoke(instance, null);
}
}
class MyClass
{
public int MyProperty { get; set; }
public void MyMethod()
{
Console.WriteLine("Method called.");
}
}
获取和使用自定义特性:
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.Class)]
public class MyCustomAttribute : Attribute
{
public string Description { get; }
public MyCustomAttribute(string description)
{
Description = description;
}
}
[MyCustom("This is a custom attribute.")]
class MyClass { }
class Program
{
static void Main()
{
// 获取类型信息
Type type = typeof(MyClass);
// 获取自定义特性
MyCustomAttribute customAttribute = (MyCustomAttribute)Attribute.GetCustomAttribute(type, typeof(MyCustomAttribute));
// 使用特性信息
Console.WriteLine("Description: " + customAttribute.Description);
}
}
反射提供了许多强大的工具,可以在运行时检查和操作类型、成员、属性等。然而,由于反射涉及到运行时的类型信息,因此使用时需要格外小心,并确保性能和类型安全性。
转载请注明出处:http://www.pingtaimeng.com/article/detail/14769/C#