C#面试常考随笔5:简单讲述下反射

发布于:2025-02-10 ⋅ 阅读:(94) ⋅ 点赞:(0)

描述:

反射允许程序在运行时获取类型的信息,包括类型的成员(如方法、属性、字段等),并可以动态地调用这些成员、创建对象等。

在性能方面,涉及到运行时的类型检查和动态调用,性能相对较低。

示范,帮助理解:

使用场景:

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

网站公告

今日签到

点亮在社区的每一天
去签到