TOC

This article is currently in the process of being translated into Ukrainian (~98% done).

Reflection:

Reflection introduction

З Вікіпедії: "В інформатиці, рефлексія — це процес, під час якого комп'ютерна програма може відслідковувати і модифікувати власну структуру і поведінку під час виконання.". Це точно описує як рефлексія(Reflection) працює в C#, і допоки Ви, можливо, ще не розумієте цього, але можливість тестувати або змінювати інформацію про Ваш застосунок протягом часу виконання(runtime) надає величезні можливості. Рефлексія, що є в той же час і загальним терміном, так само як і справжня назва можливості відображення в 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!