TOC

This article has been localized into Czech by the community.

Reflexe:

Reflexe - úvod

Wikipedia říká, že "V informatice je reflexe proces, během kterého může počítačový program pozorovat a upravovat svou vlastní strukturu a chování". To přesně odpovídá tomu, jak Reflexe v C# funguje, a i když si to v tomto okamžiku možná neuvědomujete, možnost prozkoumat a změnit informace o vaší aplikaci za běhu nabízí obrovský potenciál. Reflexe, která je jak obecným termínem, tak i skutečným názvem možností reflexe v C#, funguje velmi, velmi dobře, a ve skutečnosti není tak těžké ji používat. V následujících několika kapitolách se do toho ponoříme hlouběji a poskytneme vám několik zajímavých příkladů, které by vám měly ukázat, jak užitečná Reflexe je.

Abychom vás rozjeli a snad i zaujali, zde je malý příklad. Řeší otázku, kterou jsem viděl od mnoha nováčků v jakémkoliv programovacím jazyce: Jak mohu změnit hodnotu proměnné během běhu programu, pouze znalostí jejího jména? Podívejte se na tuto malou ukázkovou aplikaci pro řešení a přečtěte si další kapitoly pro vysvětlení různých technik, které byly použity.

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

Zkuste spustit kód a podívejte se, jak funguje. Kromě řádků, kde používáme samotnou reflexi, je vše velmi jednoduché. Nyní přejděte k další kapitole pro více teorie o tom, jak to funguje.


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!