如何在C#中实现后期绑定

时间:2011-05-27 12:40:13

标签: c# object late-binding

我在那个班上有一个普通班我写了一个方法,它应该接受object类的对象作为参数。

功能如下 -

protected void AddNewForm(object o )
{
    try
    {
        o.Show();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

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

Contact objContact=new Contact(); 
AddNewForm(objContact);

但它显示该函数中的错误。错误为 -

  

'object'不包含定义   对于'显示'而没有扩展方法   '显示'接受第一个论点   类型'对象'可以找到(是你   缺少使用指令或   装配参考?)

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

感谢。

2 个答案:

答案 0 :(得分:7)

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

protected void AddNewForm(dynamic o)
{
    try
    {
        o.Show();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

如果您不使用.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);
    }
}

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

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);
    }
}

答案 1 :(得分:0)

对于仍在寻找这种东西的人,我发现https://andy.edinborough.org/Use-Late-Binding-in-C-Now-without-NET-4-0很有帮助,我不会在此处发布全部内容,但是如果过时了,它也可以在Wayback机器上使用