什么是C#中的反映?我们在申请中将这个概念用在哪里?

时间:2010-04-26 10:21:26

标签: c# asp.net

C#中的反映是什么?我们在应用程序中将这个概念用在哪里?

4 个答案:

答案 0 :(得分:16)

Reflection 提供封装程序集,模块和类型的对象(类型为Type)。您可以使用反射来动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果您在代码中使用属性,则可以使用反射来访问它们......

作为参考,MSDN article on reflection和代码项目reflection已经很好地解释了......

例如,请查看C# Reflection Examples

答案 1 :(得分:5)

来自documentation

  

Reflection提供对象(类型为   Type)封装组件,   模块和类型。您可以使用   反射动态创建   类型的实例,将类型绑定到   现有对象,或获取类型   从现有对象调用它   方法或访问其字段和   属性。如果你正在使用   代码中的属性,Reflection   使您可以访问它们。更多   信息,请参阅属性。

Wikipedia说:

  

在计算机科学中,反思是   计算机程序的过程   可以观察和修改自己的   结构和行为。该   编程范式   反射被称为反射   节目。这是一种特殊的   元编程。

例如,如果要以编程方式显示类的所有方法,可以这样做:

using System;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            var t = typeof(MyClass);

            foreach (var m in t.GetMethods())
            {
                Console.WriteLine(m.Name);
            }
            Console.ReadLine();
        }
    }


    public class MyClass
    {
        public int Add(int x, int y)
        {
            return x + y;
        }

        public int Subtract(int x, int y)
        {
            return x - y;
        }
    }
}

答案 2 :(得分:2)

您将在框架中找到一种反射的用法:执行特定的功能(在该框架中)使用某些类。但确切的类在编译时是未知的,而是在某个文本文件中配置为classname(通常包括它的程序集)。使用反射,您可以获取该字符串并创建该特定类的实例。

答案 3 :(得分:0)

你有什么反思的答案,在过去我曾经使用它的一些情况:

  • 一种通用方法,它接受属性列表并将一个对象中的属性复制到另一个对象
  • 使用Description属性获取枚举文本的方法,类似于this

另请参阅this article了解反射的示例,以及页面底部的其他链接。