如何在C#中实现LateBinding

本文关键字:实现 LateBinding | 更新日期: 2023-09-27 17:57:53

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

功能如下-

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

我从另一个类调用这个函数。但是当我把这个函数称为-时

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

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

"object"不包含定义对于"Show"和无扩展方法"Show"接受的第一个参数可以找到类型"object"(你是缺少using指令或装配参考?)

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

谢谢。

如何在C#中实现LateBinding

如果使用。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);
    }
}

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