리플렉션은 관리 코드가 자체 메타데이터를 읽어 어셈블리를 찾을 수 있는 경우입니다. 기본적으로 코드에서 동일한 시스템 내의 다른 코드를 검사할 수 있습니다. C#에서 리플렉션을 사용하면 형식의 인스턴스를 동적으로 만들고 해당 형식을 기존 개체에 바인딩할 수 있습니다. 또한 기존 개체에서 유형을 가져와 속성에 액세스할 수 있습니다. 코드에서 속성을 사용할 때 리플렉션은 모듈, 어셈블리 및 유형을 설명하는 Type의 개체를 제공하므로 액세스를 제공합니다.
Double 유형의 속성이 있고 런타임에 실제로 값을 문자열로 갖고 유형을 변경한 후 속성에 할당한다고 가정해 보겠습니다. Convert.ChangeType()을 사용할 수 있습니다. - 모든 IConvertible 유형에 대한 런타임 정보를 사용하여 표현 형식을 변경할 수 있습니다.
예
using System; using System.Reflection; namespace DemoApplication{ class Program{ static void Main(){ Circle circle = new Circle(); string value = "6.5"; PropertyInfo propertyInfo = circle.GetType().GetProperty("Radius"); propertyInfo.SetValue(circle, Convert.ChangeType(value, propertyInfo.PropertyType), null); var radius = circle.GetType().GetProperty("Radius").GetValue(circle, null); Console.WriteLine($"Radius: {radius}"); Console.ReadLine(); } } class Circle{ public double Radius { get; set; } } }
출력
Radius: 6.5
위의 예에서 문자열 값 "6.5"가 Convert.ChangeType을 사용하여 실제 typedouble로 변환되고 리플렉션 inruntime을 사용하여 Radius 속성에 할당되는 것을 볼 수 있습니다.