This article is currently in the process of being translated into Ukrainian (~98% done).
The right Type
Клас Type є основою рефлексії. Він оброблює протягом часу виконання інформацію про збірку, модуль або тип. На щастя, отримання поислання на Type як об'єкт є дуже простим процесом, від того, що кожен клас наслідується від класу Object та має метод GetType(). Якщо Вам потрібна інформація про тип, що не має екземплярів або не може мати, Ви можете викоритати загальнодоступний метод typeof(), який робить саме це. Розгляньте наступні приклади, де ми використовуємо обидва підходи.
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ReflectionTest
{
class Program
{
static void Main(string[] args)
{
string test = "test";
Console.WriteLine(test.GetType().FullName);
Console.WriteLine(typeof(Int32).FullName);
Console.ReadKey();
}
}
}
Ми використовуємо метод GetType() для нашої власної змінної, а потім використовуємо метод typeof() для відомого класу-Int32. Як Ви можете бачити, результат у обидвох випадках є об'єктом Type(класу), для якого ми можемо отримати властивість FullName.
У той ж час, Ви можете мати лише ім'я типу, який шукаєте. У цьому випадку, Ви отримаєте посилання на нього з відповідної збірки. У наступному прикладі ми отримали посилання на виконувану збірку, тобто ту, з якої поточний код почав виконуватися, потім ми внесли у список всі його типи.
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ReflectionTest
{
class Program
{
static void Main(string[] args)
{
Assembly assembly = Assembly.GetExecutingAssembly();
Type[] assemblyTypes = assembly.GetTypes();
foreach(Type t in assemblyTypes)
Console.WriteLine(t.Name);
Console.ReadKey();
}
}
class DummyClass
{
//Just here to make the output a tad less boring :)
}
}
Результатом будуть назви двох визначених класів: Program i DummyCat, але в більш складних програмах, список буде здебільшого більш цікавим. У цьому випадку, ми тільки отримуємо назви типів, але зрозуміло, що ми можемо отримати набагато більше за допомогою посилання на Type, що ми отримаємо. У наступних розділах, буде показано більша кількість того, що ми можемо робити з цим.