0Pricing
C# Academy · 课时

理解 C# 中的反射

使用反射在运行时检查和操作对象

理解 C# 中的反射 是 CoddyKit 上的免费 C# Academy 课时。 这是第 5 节课,共 5 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 5 节课。

反射简介

理解 C# 中的反射

欢迎来到下一课!在本课中,您将学习 C# 中的反射。这是一项强大的功能,可以让您在运行时检查类型和对象并与之交互。让我们开始吧!

理解 C# 中的反射 — 插图 1

什么是反射?

什么是反射?

反射是程序在运行时检查和操作自身结构的能力。它通常用于:

  • 访问有关类型、方法和属性的元数据。
  • 动态调用方法和访问字段。
  • 构建序列化程序和对象关系映射工具等框架和工具。

重点:反射属于 System.Reflection 命名空间。

访问类型信息

访问类型信息

使用 Type 类访问有关类型的元数据。示例:

提示:使用 GetProperties、GetMethods 和 GetFields 检查类型成员。

using System;

class SampleClass {
    public int Id { get; set; }
    public string Name { get; set; }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);

        Console.WriteLine("Type Name: " + type.Name);
        Console.WriteLine("Properties:");
        foreach (var prop in type.GetProperties()) {
            Console.WriteLine("- " + prop.Name);
        }
    }
}

动态创建对象

动态创建对象

您可以使用反射动态创建类的实例。示例:

重点:使用 Activator.CreateInstance 在运行时创建对象。

using System;

class SampleClass {
    public string Name { get; set; }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        object instance = Activator.CreateInstance(type);

        var property = type.GetProperty("Name");
        property.SetValue(instance, "Reflection Example");

        Console.WriteLine("Name: " + property.GetValue(instance));
    }
}

动态调用方法

动态调用方法

反射可以让您在运行时调用方法,而无需在编译时知道这些方法。示例:

提示:使用 GetMethod 和 Invoke 进行动态方法调用。

using System;

class SampleClass {
    public void Greet(string name) {
        Console.WriteLine("Hello, " + name);
    }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        object instance = Activator.CreateInstance(type);

        var method = type.GetMethod("Greet");
        method.Invoke(instance, new object[] { "World" });
    }
}

使用属性

使用属性

反射可用于检查应用于类型、方法或属性的自定义 attributes。示例:

重点:使用 GetCustomAttributes 获取属性信息。

using System;

[AttributeUsage(AttributeTargets.Class)]
class SampleAttribute : Attribute {
    public string Description { get; }
    public SampleAttribute(string description) {
        Description = description;
    }
}

[Sample("This is a sample class.")]
class SampleClass {}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        var attributes = type.GetCustomAttributes(typeof(SampleAttribute), false);

        foreach (SampleAttribute attr in attributes) {
            Console.WriteLine("Description: " + attr.Description);
        }
    }
}

练习挑战

练习挑战

创建一个程序,使用反射检查一个类,列出其方法和属性,并动态调用其中一个方法。示例:

using System;

class SampleClass {
    public int Add(int a, int b) {
        return a + b;
    }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        Console.WriteLine("Methods:");
        foreach (var method in type.GetMethods()) {
            Console.WriteLine("- " + method.Name);
        }

        object instance = Activator.CreateInstance(type);
        var addMethod = type.GetMethod("Add");
        int result = (int)addMethod.Invoke(instance, new object[] { 5, 3 });

        Console.WriteLine("Result of Add: " + result);
    }
}

使用反射的最佳实践

使用反射的最佳实践

以下是一些最佳实践:

  • 谨慎使用反射,因为它可能影响性能。
  • 缓存反射结果,提高重复调用时的效率。
  • 在可行的情况下,优先选择编译时解决方案,而不是反射。
  • 在插件和框架等动态场景中使用反射。

提示:将反射与自定义 attributes 结合使用,构建灵活且动态的应用程序。

做得很好!

做得很好!

恭喜您!您已经学会了如何使用反射在 C# 中检查和操作运行时类型。本课结束了“高级 C# 特性”类别。让我们继续探索更多编程内容吧!

理解 C# 中的反射 — 插图 10

常见问题解答

「理解 C# 中的反射」课时是免费的吗?

是的 — 「理解 C# 中的反射」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 5 节课。

「理解 C# 中的反射」这节课中我会学到什么?

使用反射在运行时检查和操作对象 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 5 节课,共 5 节。

「理解 C# 中的反射」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. C# 中的泛型
  2. Async 和 Await:使用异步代码
  3. 理解线程和任务
  4. 探索委托和 Lambda
  5. 理解 C# 中的反射
← 返回 C# Academy