DLR(동적 언어 런타임)

호출 사이트란?

public dynamic Foo (dynamic x, dynamic y)
{
  return x / y; // 동적 표현식
}
static CallSite<Func<CallSite,object,object,object>> divideSite;

[return: Dynamic]
public object Foo([Dynamic] object x, [Dynamic] object y)
{
  if (divideSite == null)
    divideSite = CallSite<Func<CallSite,object,object,object>>.Create(Microsoft.CSharp.UntimeBinder.Binder.BinaryOperation(CSharpBinderFlags.None, ExpressionType.Divide, /* 간결함을 위해 나머지 인수들 생략 */));
  return divideSite.Target(divideSite, x, y);
}

수치 형식 통합

static dynamic Mean(dynamic x, dynamic y) => (x + y) / 2;

static void Main()
{
  int x = 3, y = 5;
  Console.WriteLine(Mean(x, y));
}
string s = Mean(3, 5);  // 실행시점 오류
static T Mean<T>(T x, T y)
{
  dynamic result = ((dynamic)x + y) / 2;
  return (T) result;
}