如何在C#中实现LateBinding

Pri*_*nka 4 c# object late-binding

我在该类中有一个通用类我已经编写了一个方法,它应该接受object类的对象作为参数.

功能如下 -

protected void AddNewForm(object o )
{
    try
    {
        o.Show();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在从另一个类调用此函数.但当我把这个功能称为 -

Contact objContact=new Contact(); 
AddNewForm(objContact);
Run Code Online (Sandbox Code Playgroud)

但它显示该函数中的错误.错误如下 -

'object'不包含'Show'的定义,也没有扩展方法'Show'接受'object'类型的第一个参数(你是否缺少using指令或汇编引用?)

如何在C#windows应用程序中实现后期绑定?

谢谢.

Dan*_*rth 7

如果使用.NET 4,则可以使用new dynamic关键字:

protected void AddNewForm(dynamic o)
{
    try
    {
        o.Show();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您不使用.NET 4,则必须使用反射.
然后看起来像这样:

protected void AddNewForm(object o)
{
    try
    {
        o.GetType().GetMethod("Show", new Type[0]).Invoke(o, null);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

但你真的应该考虑使用一个通用的界面:

interface IShowable
{
    void Show();
}

class Contact : IShowable
{
    public void Show() { /* ... */ }
}

protected void AddNewForm(IShowable o)
{
    try
    {
        o.Show();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)