什么时候需要用到Type.DefaultBinder之外的binder

什么时候需要用到Type.DefaultBinder以外的binder?
通常,用动态Invoke方式调用方法的时候,有个Binder参数通常是指定null,代表使用Type.DefaultBinder以外的binder。
假设有个Type,有个方法叫做method,输入参数是一个string,输出参数也是一个string

string ret = (string)Mytype.InvokeMember(
"method",
BindingFlags.InvokeMethod,
null,//这个是null
null,
new string[1] { "abc" }
);

那么什么情况,或者应用场景下面,需要使用Type.DefaultBinder以外的绑定方式呢?
我之所以问这个问题,是因为如果使用其他的方式来Invoke一个方法或者属性,例如

MethodInfo mi = mytype.GetMethod("method");
mi.Invoke(obj, new string[1] { "abc" });

那么和Type.InvokeMember相比,我好像根本没有机会来指定一个绑定器?
那么这两种Invoke方式到底有什么不同的地方,为什么InvokeMember可以有一个绑定器参数。

------解决思路----------------------
Binder很少需要用到。你的情况中,叫method的方法只有一个,不会有歧义,不需要用到Binder。

如下例子的Calc方法有两个重载,InvokeMethod的时候会有歧义。
这种时候,自定义的Binder可以是解决歧义的方法之一
public static void Main()
{
    object ret = typeof(A).InvokeMember(
        "Calc", 
        BindingFlags.InvokeMethod, 
        null, 
        null, 
        new object[] { (byte)123 });
    // 猜猜ret是123,还是246?
}

class A
{
    public static int Calc(int i) { return i + i; }
    public static short Calc(short s) { return s; }
}

------解决思路----------------------
Binder很少需要用到。如果你很想研究,可以从下例开始:
https://msdn.microsoft.com/en-us/library/system.reflection.binder(v=vs.100).aspx