실제로 C# 4.0에서이 작업을 수행하는 쉬운 방법이 있습니다. .
이것은 머리 기사가 될 것입니다. 그러나 코드를 안전하게 만들기 위해 조금 더 선언해야한다는 것을 기억하십시오.
class DynamicTester : DynamicObject
{
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
Console.WriteLine("Someone is calling method {0}", binder.Name); result = null; return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
Console.WriteLine("Someone is trying to get attribute {0}", binder.Name); result = null; return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
Console.WriteLine("Someone is trying to set attribute {0} to value {1}", binder.Name, Convert.ToString(value)); return true;
}
}
class Program
{
static void Main(string[] args)
{
dynamic dt = new DynamicTester();
dt.A = "Test"; dt.B = 14; dt.date = DateTime.Now;
var i = dt.Z;
dt.Tester(1, 2, 3);
}
}
핵심 부분은 데이터 유형으로 동적을 사용하는 것입니다. 컴파일 타임에 메소드/애트리뷰트 호출을 해결하지 말고 런타임시 자신의 코드로도 해결하도록 시도한다.
은 전에 완료해야했던 전체 리팩터링을 단순화합니다.
리플렉션을 사용하지 않고도 C# 4의 동적 오브젝트를 사용하여 정확히 수행 할 수 있습니다. –