Отражение позволяет приложению собирать информацию о себе, а также манипулировать собой. Его можно использовать для поиска всех типов в сборке и / или динамического вызова методов в сборке.
System.Reflection: пространство имен содержит классы и интерфейсы, которые обеспечивают управляемое представление загруженных типов, методов и полей с возможностью динамического создания и вызова типов; этот процесс известен как Отражение в .NET Framework.
System.Type: class является основным классом для функциональности .NET Reflection и основным способом доступа к метаданным. Класс System.Type является абстрактным классом и представляет тип в общей системе типов (CLS).
Он представляет объявления типов: типы классов, типы интерфейсов, типы массивов, типы значений, типы перечисления, параметры типов, определения универсальных типов и открытые или закрытые построенные универсальные типы.
Например:
using System;
using System.Reflection;
static class ReflectionTest
{
public static int Height;
public static int Width;
public static int Weight;
public static string Name;
public static void Write()
{
Type type = typeof(ReflectionTest); // Get type pointer
FieldInfo[] fields = type.GetFields(); // Obtain all fields
foreach (var field in fields) // Loop through fields
{
string name = field.Name; // Get string name
object temp = field.GetValue(null); // Get value
if (temp is int) // See if it is an integer.
{
int value = (int)temp;
Console.Write(name);
Console.Write(" (int) = ");
Console.WriteLine(value);
}
else if (temp is string) // See if it is a string.
{
string value = temp as string;
Console.Write(name);
Console.Write(" (string) = ");
Console.WriteLine(value);
}
}
}
}
class Program
{
static void Main()
{
ReflectionTest.Height = 100; // Set value
ReflectionTest.Width = 50; // Set value
ReflectionTest.Weight = 300; // Set value
ReflectionTest.Name = "ShekharShete"; // Set value
ReflectionTest.Write(); // Invoke reflection methods
}
}
Output
Height (int) = 100
Width (int) = 50
Weight (int) = 300
Name (string) = ShekharShete