C#面试常考随笔5:简单讲述下反射
描述:
反射允许程序在运行时获取类型的信息,包括类型的成员(如方法、属性、字段等),并可以动态地调用这些成员、创建对象等。
在性能方面,涉及到运行时的类型检查和动态调用,性能相对较低。
示范,帮助理解:
使用场景:
C#的反射使用示例-CSDN博客
基本示范:
1.获取类型信息:可以在运行时获取类型的名称、基类、实现的接口等信息。例如:
using System;
class Program
{
static void Main()
{
Type type = typeof(int);
Console.WriteLine($"类型名称: {type.Name}");
Console.WriteLine($"基类: {type.BaseType.Name}");
}
}
2.动态创建对象:通过反射可以在运行时根据类型信息创建对象。例如:
using System;
class MyClass
{
public void SayHello()
{
Console.WriteLine("Hello!");
}
}
class Program
{
static void Main()
{
Type type = typeof(MyClass);
object obj = Activator.CreateInstance(type);
MyClass myObj = (MyClass)obj;
myObj.SayHello();
}
}
3.调用方法和访问属性:可以在运行时动态调用类型的方法、访问和修改属性。例如:
using System;
using System.Reflection;
class MyClass
{
public int MyProperty { get; set; }
public void MyMethod()
{
Console.WriteLine("Method called.");
}
}
class Program
{
static void Main()
{
Type type = typeof(MyClass);
object obj = Activator.CreateInstance(type);
// 访问属性
PropertyInfo propertyInfo = type.GetProperty("MyProperty");
propertyInfo.SetValue(obj, 10);
int value = (int)propertyInfo.GetValue(obj);
Console.WriteLine($"Property value: {value}");
// 调用方法
MethodInfo methodInfo = type.GetMethod("MyMethod");
methodInfo.Invoke(obj, null);
}
}