TOC

This article has been localized into Russian by the community.

Отражение:

Представление Отражения

Wikipedia говорит, что "в информатике отражение - это процесс, с помощью которого компьютерная программа может наблюдать и изменять свою собственную структуру и поведение". Именно так работает отражение в C#, и хотя на данный момент вы можете этого не осознавать, возможность изучать и изменять информацию о приложении во время выполнения предоставляет огромный потенциал. Отражение, которое является как общим термином, так и фактическим именем возможностей отражения в C#, работает очень, очень хорошо, и на самом деле его не так сложно использовать. В следующих двух главах мы более подробно рассмотрим, как это работает, и предоставим Вам несколько интересных примеров, которые должны показать вам, насколько полезно отражение.

Тем не менее, чтобы вы начали и, надеюсь, заинтересовались, – вот небольшой пример. Он решает вопрос, который я видел у многих новичков в любом языке программирования: "Как я могу изменить значение переменной во время выполнения, только зная ее имя?" Посмотрите на это небольшое демо-приложение, и прочитайте следующие главы для объяснения различных используемых методов.

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace ReflectionTest
{
    class Program
    {
        private static int a = 5, b = 10, c = 20;

        static void Main(string[] args)
        {
            Console.WriteLine("a + b + c = " + (a + b + c));
            Console.WriteLine("Please enter the name of the variable that you wish to change:");
            string varName = Console.ReadLine();
            Type t = typeof(Program);
            FieldInfo fieldInfo = t.GetField(varName, BindingFlags.NonPublic | BindingFlags.Static);
            if(fieldInfo != null)
            {
                Console.WriteLine("The current value of " + fieldInfo.Name + " is " + fieldInfo.GetValue(null) + ". You may enter a new value now:");
                string newValue = Console.ReadLine();
                int newInt;
                if(int.TryParse(newValue, out newInt))
                {
                    fieldInfo.SetValue(null, newInt);
                    Console.WriteLine("a + b + c = " + (a + b + c));
                }
                Console.ReadKey();
            }
        }
    }
}

Попробуйте запустить код и посмотрите, как он работает. Помимо линий, где мы используем фактическое отражение, все очень просто. Теперь перейдите к следующей главе для получения дополнительной теории о том, как это работает.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!